Prihlaseni a odhlaseni uzivatele
This commit is contained in:
		
							parent
							
								
									6ad9cc5e0c
								
							
						
					
					
						commit
						0f7b401a16
					
				
					 5 changed files with 110 additions and 12 deletions
				
			
		|  | @ -5,17 +5,35 @@ from .models import Skola, Resitel | |||
| 
 | ||||
| from datetime import date | ||||
| 
 | ||||
| 
 | ||||
| class LoginForm(forms.Form): | ||||
| 	username = forms.CharField(label='Přihlašovací jméno',  | ||||
| 			max_length=256,  | ||||
| 			required=True) | ||||
| 	password = forms.CharField( | ||||
| 			label='Heslo', | ||||
| 			max_length=256, | ||||
| 			required=True, | ||||
| 			widget=forms.PasswordInput()) | ||||
| 
 | ||||
| 
 | ||||
| class PrihlaskaForm(forms.Form): | ||||
| 	jmeno = forms.CharField(label='Jméno', max_length=256, required=True) | ||||
| 	prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) | ||||
| 	username = forms.CharField(label='Přihlašovací jméno',  | ||||
| 			max_length=256,  | ||||
| 			required=True, | ||||
| 			help_text='Tímto jménem se následně budeš přihlašovat pro odevzdání řešení a další činnosti v semináři') | ||||
| 	# TODO heslo? | ||||
| 	password = forms.CharField( | ||||
| 			label='Heslo', | ||||
| 			max_length=256, | ||||
| 			required=True, | ||||
| 			widget=forms.PasswordInput()) | ||||
| 	password_check = forms.CharField( | ||||
| 			label='Ověření hesla', | ||||
| 			max_length=256, | ||||
| 			required=True, | ||||
| 			widget=forms.PasswordInput()) | ||||
| 
 | ||||
| 	jmeno = forms.CharField(label='Jméno', max_length=256, required=True) | ||||
| 	prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) | ||||
| 	pohlavi_muz = forms.ChoiceField(label='Pohlaví', | ||||
| 			choices = ((True,'muž'),(False,'žena')), required=True) | ||||
| 	email = forms.EmailField(label='E-mail',max_length=256, required=True) | ||||
|  | @ -56,6 +74,8 @@ class PrihlaskaForm(forms.Form): | |||
| 	def clean(self): | ||||
| 		super().clean() | ||||
| 		data = self.cleaned_data | ||||
| 		if data.get('password') != data.get('password_check'): | ||||
| 			self.add_error('password_check',forms.ValidationError('Hesla se neshodují')) | ||||
| 		if data.get('stat') != '' and data.get('stat_text') != '': | ||||
| 			self.add_error('stat',forms.ValidationError('Nelze mít vybraný stát z menu a zároven zapsaný textem')) | ||||
| 		if data.get('skola') and (data.get('skola_nazev') or data.get('skola_adresa')): | ||||
|  |  | |||
							
								
								
									
										33
									
								
								seminar/templates/seminar/login.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								seminar/templates/seminar/login.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| {% extends "seminar/zadani/base.html" %} | ||||
| {% load staticfiles %} | ||||
| 
 | ||||
| 
 | ||||
| {% block content %} | ||||
| <h1> | ||||
|   {% block nadpis1a %}{% block nadpis1b %} | ||||
|     Přihlášení | ||||
|   {% endblock %}{% endblock %} | ||||
| </h1> | ||||
| {% if login_error %}  | ||||
| <span class="field_error">{{login_error}}<span> | ||||
| {% endif %} | ||||
| <form action="/login/" method="post"> | ||||
|   {% csrf_token %} | ||||
|   {{form.non_field_errors}} | ||||
|   <ul class="form"> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.username %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.password %} | ||||
|      </li> | ||||
| </ul> | ||||
|     <input type="submit" value="Přihlásit"> | ||||
| </form> | ||||
| 
 | ||||
| <a href="/reset_password">Zapomněl jsem heslo</a><br> | ||||
| <a href="/prihlaska">Zaregistrovat</a><br> | ||||
| 
 | ||||
| 
 | ||||
| {% endblock %} | ||||
| 
 | ||||
|  | @ -19,15 +19,27 @@ | |||
|   {% csrf_token %} | ||||
|   {{form.non_field_errors}} | ||||
|   <ul class="form"> | ||||
|      <li> | ||||
|      Přihlašovací údaje | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.username %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.password %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.password_check %} | ||||
|      </li> | ||||
|      <li> | ||||
|      Osobní údaje | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.jmeno %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.prijmeni %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.username %} | ||||
|      </li> | ||||
|      <li> | ||||
|        {% include "seminar/prihlaska_field.html" with field=form.pohlavi_muz%} | ||||
|      </li> | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ from django.contrib.auth.decorators import user_passes_test | |||
| from . import views, export | ||||
| from .utils import staff_member_required | ||||
| from django.views.generic.base import RedirectView | ||||
| from django.contrib.auth import views as auth_views | ||||
| 
 | ||||
| staff_member_required = user_passes_test(lambda u: u.is_staff) | ||||
| 
 | ||||
|  | @ -97,10 +98,12 @@ urlpatterns = [ | |||
| 		staff_member_required(views.texUploadView), | ||||
| 		name='seminar_tex_upload' | ||||
| 	), | ||||
| 	path('prihlaska/',views.prihlaskaView), | ||||
| 	path('prihlaska/',views.prihlaskaView, name='seminar_prihlaska'), | ||||
| 	path('login/', views.loginView, name='login'), | ||||
| 	path('logout/', views.logoutView, name='logout'), | ||||
| 	path('autocomplete/skola/',views.SkolaAutocomplete.as_view(), name='autocomplete_skola'), | ||||
| 	path('', views.TitulniStranaView.as_view(), name='titulni_strana'), | ||||
| 
 | ||||
| 	path('autocomplete/skola/',views.SkolaAutocomplete.as_view(), name='autocomplete_skola') | ||||
| 	# Ceka na autocomplete v3 | ||||
| 	# path('autocomplete/organizatori/', | ||||
| 	# staff_member_required(views.OrganizatorAutocomplete.as_view()), | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ from django.utils.translation import ugettext as _ | |||
| from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect | ||||
| from django.db.models import Q | ||||
| from django.views.decorators.csrf import ensure_csrf_cookie | ||||
| from django.contrib.auth import authenticate, login, get_user_model | ||||
| from django.contrib.auth import authenticate, login, get_user_model, logout | ||||
| from django.db import transaction | ||||
| from dal import autocomplete | ||||
| 
 | ||||
|  | @ -17,7 +17,7 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga | |||
| #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||
| from . import utils | ||||
| from .unicodecsv import UnicodeWriter | ||||
| from .forms import PrihlaskaForm | ||||
| from .forms import PrihlaskaForm, LoginForm | ||||
| 
 | ||||
| from datetime import timedelta, date, datetime | ||||
| from django.utils import timezone | ||||
|  | @ -952,6 +952,33 @@ def texDownloadView(request, rocnik, cislo): | |||
| 	return JsonResponse(response) | ||||
| 
 | ||||
| ## Formulare | ||||
| def loginView(request): | ||||
| 	if request.method == 'POST': | ||||
| 		form = LoginForm(request.POST) | ||||
| 		if form.is_valid(): | ||||
| 			user = authenticate(request,  | ||||
| 				username=form.cleaned_data['username'], | ||||
| 				password=form.cleaned_data['password']) | ||||
| 			print(form.cleaned_data) | ||||
| 			if user is not None: | ||||
| 				login(request,user) | ||||
| 				return HttpResponseRedirect('/') | ||||
| 			else: | ||||
| 				return render(request,  | ||||
| 					'seminar/login.html',  | ||||
| 					{'form': form, 'login_error': 'Neplatné jméno nebo heslo'}) | ||||
| 
 | ||||
| 	else: | ||||
| 		form = LoginForm() | ||||
| 	return render(request, 'seminar/login.html', {'form': form}) | ||||
| 
 | ||||
| def logoutView(request): | ||||
| 	form = LoginForm() | ||||
| 	if request.user.is_authenticated: | ||||
| 		logout(request) | ||||
| 		return render(request, 'seminar/login.html', {'form': form, 'login_error': 'Byli jste úspěšně odhlášeni'}) | ||||
| 	return render(request, 'seminar/login.html', {'form': form}) | ||||
| 
 | ||||
| 
 | ||||
| def prihlaskaView(request): | ||||
| 	logger = logging.getLogger('seminar.prihlaska') | ||||
|  | @ -980,7 +1007,10 @@ def prihlaskaView(request): | |||
| 				pass | ||||
| 			 | ||||
| 			with transaction.atomic(): | ||||
| 				u = User(username=form.cleaned_data['username']) | ||||
| 				u = User.objects.create_user( | ||||
| 					username=form.cleaned_data['username'], | ||||
| 					password=form.cleaned_data['password'], | ||||
| 					email = form.cleaned_data['email']) | ||||
| 				u.save() | ||||
| 
 | ||||
| 				o = Osoba( | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue