---
tags: Python Web
source: https://python-scripts.com/user-accounts-django
---
# Тема 6. Регистрация и аутентификация пользователя
https://github.com/roman-yatsenko/django-topics/tree/main/django-users
## Приложение auth
При создании любого нового проекта, Django по умолчанию устанавливает приложение `auth`. В нем есть [*объект User*](https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.User), содержащий такие поля как:
* username
* password
* email
* first_name
* last_name
## Аутентификация пользователя
### `blog_project\urls.py`
```python=19
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')), # new
path('', include('blog.urls')),
]
```
```shell
mkdir templates/registration
touch templates/registration/login.html
```
### `templates\registration\login.html`
```htmlmixed=
{% extends 'base.html' %}
{% block content %}
<h2>Log In</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Log In</button>
</form>
{% endblock content %}
```
### `blog_project\settings.py`
```python=124
LOGIN_REDIRECT_URL = 'home'
```
```shell=
python manage.py runserver
# http://127.0.0.1:8000/accounts/login/
```
## Данные пользователя на главной странице
### `templates\base.html`
```htmlmixed=16
</header>
<div>
{% if user.is_authenticated %}
<p>Hi {{ user.username }}!</p>
{% else %}
<p>You are not logged in.</p>
<a href="{% url 'login' %}">Log In</a>
{% endif %}
</div>
<div>
{% block content %}
```
## Выход пользователя из профиля
### `templates\base.html`
```htmlmixed=18
{% if user.is_authenticated %}
<p>Hi {{ user.username }}!</p>
<p><a href="{% url 'logout' %}">Log out</a></p>
{% else %}
```
### `blog_project\settings.py`
```python=125
LOGOUT_REDIRECT_URL = 'home'
```
## Регистрация нового пользователя
```shell
python manage.py startapp accounts
```
### `blog_project\settings.py`
```python=33
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'accounts' # new
]
```
### `blog_project\urls.py`
```python=19
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/', include('accounts.urls')), # new
path('', include('blog.urls')),
]
```
```shell
touch accounts/urls.py
```
### `accounts\urls.py`
```python=
from django.urls import path
from .views import SignUpView
urlpatterns = [
path('signup/', SignUpView.as_view(), name='signup'),
]
```
### `accounts\views.py`
```python=
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic
class SignUpView(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
```
```shell
touch templates/signup.html
```
### `templates\signup.html`
```htmlmixed=
{% extends 'base.html' %}
{% block content %}
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Sign up</button>
</form>
{% endblock content %}
```
```shell=
python manage.py runserver
# http://127.0.0.1:8000/accounts/signup/
```
---
(c) Яценко Р.Н., 2020
[Учебный центр компьютерных технологий "Кит"](http://kit.kh.ua/)
<img src="https://i.imgur.com/Kh901c1.png" style="width: 150px; position: fixed; top: 100px; right: 10px; border: 0; box-shadow: none;">