Uživatelé
Ověřování uživatelů
Vytvoříme novou aplikaci users:
python manage.py startapp usersDo souboru settings.py doplním:
INSTALLED_APPS = [
'flights',
'users', # doplníme název aplikace
'django.contrib.admin',
...
]Do souboru airline\urls.py doplním:
path('users/', include('users.urls')),Vytvoříme soubor pro aplikaci users\urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.user, name="user"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout")
]Upravíme soubor users\views.py:
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
# Create your views here.
def user(request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse("login"))
return render(request, "users/user.html")
def login_view(request):
if request.method == "POST":
username = request.POST["username"]
password = request.POST["password"]
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse("user"))
else:
return render(request, "users/login.html", {
"message": "Invalid credentials."
})
else:
return render(request, "users/login.html")
def logout_view(request):
logout(request)
return render(request, "users/login.html", {
"message": "Logged out."
})Vytvoříme šablony users\templates\users\layout.html, users\templates\users\login.html, users\templates\users\user.html.
Login
{% extends "users/layout.html" %}
{% block body %}
<h1>Log In</h1>
{% if message %}
<div>{{ message }}</div>
{% endif %}
<form action="{% url 'login' %}" method="post">
{% csrf_token %}
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="Login">
</form>
{% endblock %}User
{% extends "users/layout.html" %}
{% block body %}
<h1>Welcome, {{ request.user.first_name }}</h1>
<ul>
<li>Username: {{ request.user.username }}</li>
<li>Email: {{ request.user.email }}</li>
</ul>
<a href="{% url 'logout' %}">Log Out</a>
{% endblock %}Registrace uživatele
Zdroj: https://dev.to/donesrom/how-to-set-up-django-built-in-registration-in-2023-41hg
Vytvoříme soubor s formulářem v rámci naší aplikace: formular.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ["username", "first_name", "last_name","email", "password1", "password2"]V souboru aplikace upravíme views.py
from . formular import *
from django.shortcuts import render, redirect # přidáme redirect
from django.contrib.auth.forms import *
def sign_up(request):
if request.method == "POST":
form = RegistrationForm(request.POST)
if form.is_valid():
user = form.save()
login(request,user)
return redirect("/")
else:
form = RegistrationForm()
return render(request, "users\sign_up.html", {
"form":form
})Upravíme urls.py aplikace:
path("sign_up", views.sign_up, name="sign_up")Vytvoříme šablonu: .\templates\aplikace\sign_up.html
{% extends "users/layout.html" %}
{% block body %}
<h3>Registrace uživatele</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Sign up</button>
</form>
{% endblock %}Kromě .as_p nabízí Django další vestavěné formáty:
| Metoda | HTML obal (Wrapper) | Poznámka |
|---|---|---|
{ form.as_div } |
<div> |
Nejmodernější přístup. |
{ form.as_table } |
<tr> |
V šabloně přidejte tag <table>. |
{ form.as_ul } |
<li> |
V šabloně přidejte tag <ul>. |
Chceme-li ve formuláři češtinu upravíme settings.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'cs'Nakonec můžete přidat bootstrap pro lepší vzhled webové aplikace. Buď klasicky nebo pomocí django-bootstrap5