Logovani registracniho formulare.
This commit is contained in:
parent
783c01c4b8
commit
d407f27ed9
2 changed files with 73 additions and 51 deletions
|
@ -1,9 +1,12 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from dal import autocomplete
|
from dal import autocomplete
|
||||||
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from .models import Skola, Resitel
|
from .models import Skola, Resitel, Osoba
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
import logging
|
||||||
|
|
||||||
class LoginForm(forms.Form):
|
class LoginForm(forms.Form):
|
||||||
username = forms.CharField(label='Přihlašovací jméno',
|
username = forms.CharField(label='Přihlašovací jméno',
|
||||||
|
@ -71,8 +74,37 @@ class PrihlaskaForm(forms.Form):
|
||||||
zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True)
|
zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True)
|
||||||
gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True)
|
gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True)
|
||||||
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)
|
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)
|
||||||
|
|
||||||
|
def clean_username(self):
|
||||||
|
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
|
username = self.cleaned_data.get('username')
|
||||||
|
try:
|
||||||
|
User.objects.get(username=username)
|
||||||
|
msg = "Username {} exists".format(username)
|
||||||
|
err_logger.info(msg)
|
||||||
|
raise forms.ValidationError('Přihlašovací jméno je již použito')
|
||||||
|
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def clean_email(self):
|
||||||
|
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
|
email = self.cleaned_data.get('email')
|
||||||
|
try:
|
||||||
|
Osoba.objects.get(email=email)
|
||||||
|
msg = "Email {} exists".format(email)
|
||||||
|
err_logger.info(msg)
|
||||||
|
raise forms.ValidationError('Email je již použit')
|
||||||
|
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
|
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
|
|
||||||
data = self.cleaned_data
|
data = self.cleaned_data
|
||||||
if data.get('password') != data.get('password_check'):
|
if data.get('password') != data.get('password_check'):
|
||||||
self.add_error('password_check',forms.ValidationError('Hesla se neshodují'))
|
self.add_error('password_check',forms.ValidationError('Hesla se neshodují'))
|
||||||
|
@ -87,6 +119,3 @@ class PrihlaskaForm(forms.Form):
|
||||||
self.add_error('skola_nazev',forms.ValidationError('Je nutné vyplnit název školy'))
|
self.add_error('skola_nazev',forms.ValidationError('Je nutné vyplnit název školy'))
|
||||||
elif data.get('skola_adresa')=='':
|
elif data.get('skola_adresa')=='':
|
||||||
self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy'))
|
self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy'))
|
||||||
from seminar.models import Resitel
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||||
from django.contrib.auth import authenticate, login, get_user_model, logout
|
from django.contrib.auth import authenticate, login, get_user_model, logout
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from dal import autocomplete
|
from dal import autocomplete
|
||||||
|
@ -1025,83 +1026,75 @@ def logoutView(request):
|
||||||
return render(request, 'seminar/login.html', {'form': form})
|
return render(request, 'seminar/login.html', {'form': form})
|
||||||
|
|
||||||
|
|
||||||
|
def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data):
|
||||||
|
msg = "{}, form_hash:{}".format(msg,hash(form_data))
|
||||||
|
logger.warn(msg)
|
||||||
|
gdpr_logger.warn(msg+", form:{}".format(form_data))
|
||||||
|
|
||||||
|
|
||||||
def prihlaskaView(request):
|
def prihlaskaView(request):
|
||||||
logger = logging.getLogger('seminar.prihlaska')
|
generic_logger = logging.getLogger('seminar.prihlaska')
|
||||||
|
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
|
form_logger = logging.getLogger('seminar.prihlaska.form')
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = PrihlaskaForm(request.POST)
|
form = PrihlaskaForm(request.POST)
|
||||||
# TODO vyresit, co se bude v jakych situacich zobrazovat
|
# TODO vyresit, co se bude v jakych situacich zobrazovat
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
print("Form valid")
|
generic_logger.info("Form valid")
|
||||||
try:
|
fcd = form.cleaned_data
|
||||||
# mame jiz email v databazi?
|
form_hash = hash(fcd)
|
||||||
o = Osoba.objects.get(email=form.cleaned_data['email'])
|
form_logger.info(fcd,form_hash=form_hash)
|
||||||
print("Email existuje: {}".format(form.cleaned_data))
|
|
||||||
# TODO seřvat a nepustit dál
|
|
||||||
return HttpResponseRedirect('/thanks/')
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
User = get_user_model()
|
|
||||||
try:
|
|
||||||
u = User.objects.get(username=form.cleaned_data['username'])
|
|
||||||
print("Username existuje: {}".format(form.cleaned_data))
|
|
||||||
# TODO seřvat a nepustit dál
|
|
||||||
return HttpResponseRedirect('/thanks/')
|
|
||||||
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
u = User.objects.create_user(
|
u = User.objects.create_user(
|
||||||
username=form.cleaned_data['username'],
|
username=fcd['username'],
|
||||||
password=form.cleaned_data['password'],
|
password=fcd['password'],
|
||||||
email = form.cleaned_data['email'])
|
email = fcd['email'])
|
||||||
u.save()
|
u.save()
|
||||||
|
|
||||||
o = Osoba(
|
o = Osoba(
|
||||||
jmeno = form.cleaned_data['jmeno'],
|
jmeno = fcd['jmeno'],
|
||||||
prijmeni = form.cleaned_data['prijmeni'],
|
prijmeni = fcd['prijmeni'],
|
||||||
pohlavi_muz = form.cleaned_data['pohlavi_muz'],
|
pohlavi_muz = fcd['pohlavi_muz'],
|
||||||
email = form.cleaned_data['email'],
|
email = fcd['email'],
|
||||||
telefon = form.cleaned_data.get('telefon',''),
|
telefon = fcd.get('telefon',''),
|
||||||
datum_narozeni = form.cleaned_data.get('datum_narozeni',None),
|
datum_narozeni = fcd.get('datum_narozeni',None),
|
||||||
datum_souhlasu_udaje = date.today(),
|
datum_souhlasu_udaje = date.today(),
|
||||||
datum_registrace = date.today(),
|
datum_registrace = date.today(),
|
||||||
ulice = form.cleaned_data.get('ulice',''),
|
ulice = fcd.get('ulice',''),
|
||||||
mesto = form.cleaned_data.get('mesto',''),
|
mesto = fcd.get('mesto',''),
|
||||||
psc = form.cleaned_data.get('psc',''),
|
psc = fcd.get('psc',''),
|
||||||
poznamka = str(form.cleaned_data)
|
poznamka = str(fcd)
|
||||||
)
|
)
|
||||||
if form.cleaned_data.get('spam',False):
|
if fcd.get('spam',False):
|
||||||
o.datum_souhlasu_zasilani = date.today()
|
o.datum_souhlasu_zasilani = date.today()
|
||||||
if form.cleaned_data.get('stat','') in ('CZ','SK'):
|
if fcd.get('stat','') in ('CZ','SK'):
|
||||||
o.stat = form.cleaned_data['stat']
|
o.stat = fcd['stat']
|
||||||
else:
|
else:
|
||||||
pass
|
# Unknown country - log it
|
||||||
#TODO jak budeme resit jine staty?
|
msg = "Unknown country {}".format(fcd['stat_text'])
|
||||||
|
err_logger.warn(msg,form_hash=form_hash)
|
||||||
|
|
||||||
o.save()
|
o.save()
|
||||||
o.user = u
|
o.user = u
|
||||||
o.save()
|
o.save()
|
||||||
|
|
||||||
r = Resitel(
|
r = Resitel(
|
||||||
rok_maturity = form.cleaned_data['rok_maturity'],
|
rok_maturity = fcd['rok_maturity'],
|
||||||
zasilat = form.cleaned_data['zasilat']
|
zasilat = fcd['zasilat']
|
||||||
)
|
)
|
||||||
|
|
||||||
r.save()
|
r.save()
|
||||||
r.osoba = o
|
r.osoba = o
|
||||||
if form.cleaned_data.get('skola'):
|
if fcd.get('skola'):
|
||||||
r.skola = form.cleaned_data['skola']
|
r.skola = fcd['skola']
|
||||||
else:
|
else:
|
||||||
pass
|
# Unknown school - log it
|
||||||
#TODO doplnit skolu, kdyz neni v seznamu
|
msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa'])
|
||||||
|
err_logger.warn(msg,form_hash=form_hash)
|
||||||
r.save()
|
r.save()
|
||||||
|
|
||||||
|
|
||||||
# TODO logovat jednotlive validni formulare do souboru
|
|
||||||
print(form.cleaned_data)
|
|
||||||
logger.info(form.cleaned_data)
|
|
||||||
return HttpResponseRedirect('/thanks/')
|
return HttpResponseRedirect('/thanks/')
|
||||||
|
|
||||||
# if a GET (or any other method) we'll create a blank form
|
# if a GET (or any other method) we'll create a blank form
|
||||||
|
|
Loading…
Reference in a new issue