diff --git a/.gitignore b/.gitignore index 5d534b58810e9aadff76925e424c26ffa166e272..b0af3886860594515460f1df3d25c624bed52200 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,4 @@ GitHub.sublime-settings !.vscode/launch.json !.vscode/extensions.json .history +db.sqlite3 diff --git a/django_apps/settings.py b/django_apps/settings.py index 41de1bcb82a64d519304848745b8e7e8993229f3..2fca22b0505bf8a1e40ab303c647483ca1e8af68 100644 --- a/django_apps/settings.py +++ b/django_apps/settings.py @@ -129,5 +129,5 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # Custom settings AUTH -LOGIN_REDIRECT_URL = 'index' +LOGIN_REDIRECT_URL = 'home' LOGOUT_REDIRECT_URL = 'index' diff --git a/requirements.txt b/requirements.txt index 7dd6fb476d59d89ab95cd909c6b0a197771dc553..83d66431530342db426469989fa4a293a3928085 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,49 @@ +appdirs==1.4.4 asgiref==3.3.4 -asn1crypto==0.24.0 +asn1crypto==1.4.0 +backcall==0.2.0 +cffi==1.14.6 confusable-homoglyphs==3.2.0 -cryptography==2.6.1 +cryptography==3.3.2 +dbus-python==1.2.16 +decorator==5.0.9 +distlib==0.3.1 Django==3.2.3 -django-registration==3.1.2 +django-registration==3.2 entrypoints==0.3 -keyring==17.1.1 -keyrings.alt==3.1.1 +filelock==3.0.12 +importlib-metadata==1.6.0 +ipython==7.27.0 +ipython-genutils==0.2.0 +jedi==0.18.0 +jeepney==0.6.0 +keyring==22.0.1 +keyrings.alt==4.0.2 +Mako==1.1.3 +Markdown==3.3.4 +MarkupSafe==1.1.1 +matplotlib-inline==0.1.2 +more-itertools==4.2.0 +parso==0.8.2 +pexpect==4.8.0 +pickleshare==0.7.5 +prompt-toolkit==3.0.20 +ptyprocess==0.7.0 +pycairo==1.20.1 +pycparser==2.20 pycrypto==2.6.1 -PyGObject==3.30.4 +pycryptodomex==3.9.7 +Pygments==2.7.1 +PyGObject==3.38.0 pytz==2021.1 -pyxdg==0.25 -SecretStorage==2.3.1 -six==1.12.0 +pyxdg==0.27 +PyYAML==5.3.1 +SecretStorage==3.3.1 +six==1.16.0 sqlparse==0.4.1 +traitlets==5.0.5 typing-extensions==3.10.0.0 -virtualenv==15.1.0 +virtualenv==20.4.0+ds +wcwidth==0.2.5 +xdg==5 +zipp==1.0.0 diff --git a/sifrovacka/admin.py b/sifrovacka/admin.py index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..30aa8666949934afc40e04d4e2a0536b14d10d08 100644 --- a/sifrovacka/admin.py +++ b/sifrovacka/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin # Register your models here. + +from . import models + +admin.site.register(models.Sifrovacka) +admin.site.register(models.Stages) +admin.site.register(models.Participants) diff --git a/sifrovacka/migrations/0001_initial.py b/sifrovacka/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..169825d4a5509c6edcf12faa8a3e02b8ccf7d80d --- /dev/null +++ b/sifrovacka/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.3 on 2021-08-12 06:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Sifrovacka', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('siftovacka_name', models.CharField(max_length=200)), + ('pub_date', models.DateTimeField(verbose_name='date published')), + ('startdate_sifrovacka', models.DateField()), + ('enddate_sifrovacka', models.DateField()), + ], + ), + migrations.CreateModel( + name='Stages', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('stage_number', models.IntegerField()), + ('choice_text', models.CharField(max_length=200)), + ('votes', models.IntegerField(default=0)), + ('startdate_stages', models.DateField()), + ('enddate_stages', models.DateField()), + ('sifrovacka', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sifrovacka.sifrovacka')), + ], + ), + ] diff --git a/sifrovacka/migrations/0002_auto_20210812_0714.py b/sifrovacka/migrations/0002_auto_20210812_0714.py new file mode 100644 index 0000000000000000000000000000000000000000..9c60c06ba91bf3714a15e372e7c72d651a571ddd --- /dev/null +++ b/sifrovacka/migrations/0002_auto_20210812_0714.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.3 on 2021-08-12 07:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='stages', + name='enddate_stages', + ), + migrations.RemoveField( + model_name='stages', + name='startdate_stages', + ), + migrations.RemoveField( + model_name='stages', + name='votes', + ), + ] diff --git a/sifrovacka/migrations/0003_auto_20210812_0733.py b/sifrovacka/migrations/0003_auto_20210812_0733.py new file mode 100644 index 0000000000000000000000000000000000000000..085127eb01215190d9209e55d3f16b1fa92ddae0 --- /dev/null +++ b/sifrovacka/migrations/0003_auto_20210812_0733.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.3 on 2021-08-12 07:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0002_auto_20210812_0714'), + ] + + operations = [ + migrations.RenameField( + model_name='sifrovacka', + old_name='siftovacka_name', + new_name='sifrovacka_name', + ), + migrations.RenameField( + model_name='stages', + old_name='choice_text', + new_name='stage_name', + ), + ] diff --git a/sifrovacka/migrations/0004_participants.py b/sifrovacka/migrations/0004_participants.py new file mode 100644 index 0000000000000000000000000000000000000000..c971b29691161c2bbd4839d38094554053286fd1 --- /dev/null +++ b/sifrovacka/migrations/0004_participants.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.3 on 2021-08-12 12:09 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('sifrovacka', '0003_auto_20210812_0733'), + ] + + operations = [ + migrations.CreateModel( + name='Participants', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('participate', models.BooleanField()), + ('sifrovacka', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sifrovacka.sifrovacka')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/sifrovacka/migrations/0005_rename_participate_participants_is_active.py b/sifrovacka/migrations/0005_rename_participate_participants_is_active.py new file mode 100644 index 0000000000000000000000000000000000000000..b8b9086760b967c8a1c768aff61e83cfa23e92a4 --- /dev/null +++ b/sifrovacka/migrations/0005_rename_participate_participants_is_active.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-08-30 10:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0004_participants'), + ] + + operations = [ + migrations.RenameField( + model_name='participants', + old_name='participate', + new_name='is_active', + ), + ] diff --git a/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py b/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py new file mode 100644 index 0000000000000000000000000000000000000000..30ea600c0f790d4aaf475a38ad29643f529e054d --- /dev/null +++ b/sifrovacka/migrations/0006_rename_is_active_participants_inactive.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.3 on 2021-08-30 10:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sifrovacka', '0005_rename_participate_participants_is_active'), + ] + + operations = [ + migrations.RenameField( + model_name='participants', + old_name='is_active', + new_name='Inactive', + ), + ] diff --git a/sifrovacka/migrations/0007_alter_participants_unique_together.py b/sifrovacka/migrations/0007_alter_participants_unique_together.py new file mode 100644 index 0000000000000000000000000000000000000000..8178257c2f89c35f4e0eeab8bc3e335d879cc5b6 --- /dev/null +++ b/sifrovacka/migrations/0007_alter_participants_unique_together.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.3 on 2021-08-30 10:52 + +from django.conf import settings +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('sifrovacka', '0006_rename_is_active_participants_inactive'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='participants', + unique_together={('user', 'sifrovacka')}, + ), + ] diff --git a/sifrovacka/models.py b/sifrovacka/models.py index 71a836239075aa6e6e4ecb700e9c42c95c022d91..fe5d66d680156c2645fd95ab9cb02726d2b116b5 100644 --- a/sifrovacka/models.py +++ b/sifrovacka/models.py @@ -1,3 +1,55 @@ from django.db import models # Create your models here. + +from django.conf import settings + + +class Sifrovacka(models.Model): + ''' + model which describes sifrovacka + ''' + sifrovacka_name = models.CharField(max_length=200) + pub_date = models.DateTimeField('date published') + startdate_sifrovacka = models.DateField() + enddate_sifrovacka = models.DateField() + + def __str__(self): + return self.sifrovacka_name + + +class Stages(models.Model): + ''' + model which describes how many stages are in particular sifrovacka + ''' + stage_name = models.CharField(max_length=200) + sifrovacka = models.ForeignKey(Sifrovacka, on_delete=models.CASCADE) + stage_number = models.IntegerField() +# if not stage_name_text models: +# stage_name = getattr(Stages, sifrovacka_name) +# "-" + getattr(Stages, stage_number)) +# else: +# stage_name = stage_name_text +# votes = models.IntegerField(default=0) +# startdate_stages = models.DateField() +# enddate_stages= models.DateField() + + def __str__(self): + return str(self.sifrovacka) + " - Stage " + str(self.stage_number) + + +class Participants(models.Model): + ''' + table which connects sifrovacka with users who participate + ''' + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + sifrovacka = models.ForeignKey(Sifrovacka, on_delete=models.CASCADE) + Inactive = models.BooleanField() + + def __str__(self): + return str(self.user) + " - " + str(self.sifrovacka) + + + class Meta: + unique_together = [['user', 'sifrovacka']] + diff --git a/sifrovacka/templates/home.html b/sifrovacka/templates/home.html new file mode 100644 index 0000000000000000000000000000000000000000..e5ff0d0d7b24743e87140dc965611ecb6eda7a7c --- /dev/null +++ b/sifrovacka/templates/home.html @@ -0,0 +1,45 @@ +{% extends "base.html" %} +{% if request.user.is_authenticated %} + {% block content %} + <ul> + <p> <b>Dostupne sifrovacky: </b> <a href={% url 'index' %}a> Zde </a></p> +{% comment %} + {% if available_sifrovacky_list %} + + {% for sifrovacka in avalable_sifrovacky_list %} + <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka }}</a></li> + {% endfor %} + </ul> +{% else %} + <p>Žádné šifrovačky nejsou aktivní.</p> + {% endif %} + +{% endcomment %} + + {% if participation_sifrovacky_list %} + <ul> + <p> <b>Přihlášené sifrovacky: </b> </p> + {% for sifrovacka in participation_sifrovacky_list %} + <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka }}</a></li> + {% endfor %} + </ul> +{% else %} + <p>Žádné šifrovačky nejsou aktivní.</p> +{% endif %} +{% endblock %} +{{% endif %} + +{% comment %} +{% block content %} + {% if active_sifrovacky_list %} + <ul> + <p> <b>Aktivni sifrovacky: </b> </p> + {% for sifrovacka in active_sifrovacky_list %} + <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li> + {% endfor %} + </ul> + {% else %} + <p>Žádné šifrovačky nejsou aktivní.</p> + {% endif %} + {% endblock %} +{% endcomment %} diff --git a/sifrovacka/templates/index.html b/sifrovacka/templates/index.html index db7423572a5af384b03c4f1d5dd7307e2d97d25b..f58a1ae29767c13c1c0029063f928a70aa233312 100644 --- a/sifrovacka/templates/index.html +++ b/sifrovacka/templates/index.html @@ -1,12 +1,16 @@ {% extends "base.html" %} {% block content %} -{% if active_sifrovacka_list %} - <ul> - {% for sifrovacka in active_sifrovacka_list %} - <li><a href="/sifrovacka/{{ sifrovacka.id }}/">{{ sifrovacka.sifrovacka_name }}</a></li> - {% endfor %} - </ul> + {% if sifrovacky_list %} + <ul> + <p> <b>Aktivni sifrovacky: </b> </p> + {% for sifrovacka in sifrovacky_list %} + <li><a href={% url 'detail' sifrovacka.id %}>{{ sifrovacka.sifrovacka_name }}</a></li> + {% endfor %} + {% for sifrovacka in participants.all %} + <li><a href="/sifrovacka/{{ sifrovacka.id }}">{{ sifrovacka.sifrovacka_name }}</a></li> + {% endfor %} + </ul> {% else %} <p>Žádné šifrovačky nejsou aktivní.</p> {% endif %} diff --git a/sifrovacka/templates/sifrovacka.html b/sifrovacka/templates/sifrovacka.html new file mode 100644 index 0000000000000000000000000000000000000000..4e779f184b9cf5028280f52ab9e506b37fd1b59d --- /dev/null +++ b/sifrovacka/templates/sifrovacka.html @@ -0,0 +1,20 @@ +{% extends "base.html" %} + +{% block content %} +<p> Toto je detail sifrovacky se jmenem: <b>{{sifrovacka_detail}} </b> a id: {{sifrovacka_id}}. </p> +</br> +<p> Pocet ukolu: <b> {{ sifrovacka_stage_count }} </b> </br> + Obtiznost: NONE</br> + Casova narocnost: NONE</p> + +</br> +</br> +</br> +</br> +Debug: +<div> +{% for stage in sifrovacka_stages %} + {{ stage }}</br> +{% endfor %} +</div> +{% endblock %} diff --git a/sifrovacka/urls.py b/sifrovacka/urls.py index aa564fb5fb70daaf0db84c83da208faf64af0155..fd54650f39434ed0a70751a75f7df41f516f3cdb 100644 --- a/sifrovacka/urls.py +++ b/sifrovacka/urls.py @@ -6,6 +6,10 @@ urlpatterns = [ # accounts uls path('accounts/', include('django_registration.backends.one_step.urls')), path('accounts/', include('django.contrib.auth.urls')), + # the 'name' value as called by the {% url %} template tag + path('<int:sifrovacka_id>/', views.detail, name='detail'), + # home page + path('home/', views.home, name='home'), # / path('', views.index, name='index'), ] diff --git a/sifrovacka/views.py b/sifrovacka/views.py index d5b43ba1239b8c6970ee30d8769979b404a76f88..ddf73c5641715c614b580c5a40d28a99076a4417 100644 --- a/sifrovacka/views.py +++ b/sifrovacka/views.py @@ -4,14 +4,46 @@ from django.shortcuts import render from django.http import HttpResponse from django.template import loader from django.contrib.auth import login,logout +from .models import Sifrovacka, Stages, Participants + + +def detail(request, sifrovacka_id): + sifrovacka_detail = Sifrovacka.objects.get(id = sifrovacka_id) + sifrovacka_stages = Stages.objects.filter(sifrovacka__sifrovacka_name = sifrovacka_detail) + sifrovacka_stage_count = sifrovacka_stages.count() + context = {"sifrovacka_id": sifrovacka_id, + "sifrovacka_detail": sifrovacka_detail, + "sifrovacka_stages": sifrovacka_stages, + "sifrovacka_stage_count": sifrovacka_stage_count} + return render(request, 'sifrovacka.html', context) + +def home(request): + all_sifrovacky_list = Sifrovacka.objects.order_by('id') + # only for auth users + if request.user.is_authenticated: + participation_sifrovacky_list = Participants.objects.filter(user = + request.user).order_by('sifrovacka_id') + #request.user).order_by('sifrovacka_id') + # available_sifrovacky_list = all_sifrovacky_list.difference( + #participation_sifrovacky_list) + else: + participation_sifrovacky_list = None + + # sifrovacka_name = Sifrovacka.objects.get(id = sifrovacka_id) + + context = {"active_sifrovacky_list": all_sifrovacky_list, + "participation_sifrovacky_list": participation_sifrovacky_list} + +# import pdb +# pdb.set_trace() + return render(request, 'home.html', context) -#def index(request): -# return HttpResponse("Hello, world. You're at the polls index.") def index(request): - template = loader.get_template('index.html') - context = {"": ""} + list_all_sifrovacky = Sifrovacka.objects.all() + context = {"sifrovacky_list": list_all_sifrovacky} + #context = {"": ""} - return HttpResponse(template.render(context, request)) + return render(request, 'index.html', context)