Вам не нужно прилагать усилия для написания собственного вида входа в систему, подобного этому. Django предоставляет более простые методы для его реализации.
Сначала убедитесь, что в ваше settings.py
включено следующее
MIDDLEWARE_CLASSES = [
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]
INSTALLED_APPS = [
...
'django.contrib.auth',
'django.contrib.contenttypes',
...
]
Добавьте все URL-адреса для входа на главную urls.py
:
from django.urls import path
from django.conf.urls import include
urlpatterns = [
....
path('accounts/', include('django.contrib.auth.urls')),
....
]
Не забудьте запустить python manage.py migrate
, чтобы создать таблицы, необходимые для приложения auth
. Теперь, когда приложение и URL-адреса готовы, необходимо создать шаблоны. Все шаблоны для приложения должны быть помещены в папку с именем registration
в каталоге templates
. Структура каталогов должна быть примерно такой.
your_django_app/
templates/
registration/
login.html
__init__.py
apps.py
settings.py
urls.py
views.py
wsgi.py
Содержимое login.html
должно быть примерно таким:
<form id="loginform" action="{% url 'login' %}" method="POST">
{% csrf_token %}
{% if next %}
<input type="hidden" name="next" value="{{ next }}" />
{% endif %}
<input name="username" id="id_username" type="text">
<label>Username</label>
<input name="password" id="id_password" type="password">
<label>Password</label>
{% if form.errors %}
Error! Wrong credentials.
{% endif %}
<button type="submit">Login</button>
</form>
После этого включите их в файл settings.py
для правильного перенаправления пользователей после входа в систему.
LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/accounts/login'
Вы все готовы идти. Обязательно создайте хотя бы одного пользователя, прежде чем попробовать это, запустив python manage.py createsuperuser
. Для всех страниц, требующих входа пользователей перед их просмотром, вы можете использовать декоратор @login_required
над их соответствующими функциями просмотра, чтобы перенаправить их на страницу входа перед отображением страницы. Пример: * +1028 *
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def home(request):
return render(request, 'home/index.html')