Как создать страницу входа на Django-сайт при помощи Python

Читать первым в Telegram

В данной статье мы покажем вам, как создать страницу входа на Django-сайт при помощи Python.

Предполагается, что вы уже знаете, как создать страницу регистрации, то есть страницу, на которой посетители могут зарегистрироваться и получить учетную запись.

Страница входа же предназначена для пользователей, которые уже имеют учётную запись на вашем сайте, и позволяет им войти в свой аккаунт.

Перейдём непосредственно к коду создания страницы входа в Django.

Страница шаблона login.html

Первым делом мы создадим файл шаблона страницы входа. Назовём эту страницу — login.html.

На этой странице будет располагаться заголовок, который сообщает о том, что это страница входа в систему, а также форма входа, состоящая из двух полей: имя пользователя и пароль.

Обратим внимание на следующий код:

<html>

<body>
<h1>Login Page </h1>

<form action="" method="POST">
{% csrf_token %}
{% if error %}
{{ error }}
{% endif %}
{{ form.as_p }}
<input type="submit" name="submit" value="Log in"/>
</form>

</html>

</body>

Итак, на этой странице располагается наша форма входа.

Файл forms.py

Далее мы перейдем к нашему файлу forms.py, который содержит нашу форму.

В файле шаблона мы указали переменную формы, но не создали её. Исправим это создав форму Loginform следующим образом:

from django import forms

class Loginform(forms.Form):
    username= forms.CharField(max_length= 25,label="Enter username")
    password= forms.CharField(max_length= 30, label='Password', widget=forms.PasswordInput)

Вам необходимо импортировать формы из Django в каждом файле forms.py.

После чего мы создаем форму Loginform, которая является экземпляром класса Form.

Эта форма имеет только 2 поля: имя пользователя и пароль, то есть всё, что нам нужно для входа в систему.

В свою очередь, имя пользователя может содержать не более 25 символов, а пароль — не более 30.

Файл urls.py

Итак, мы собираемся создать нашу отдельную страницу входа в систему по адресу URL /siteusers/login.

Открываем файл urls.py в приложении siteusers и затем приводим код к следующему виду:

from django.conf.urls import url
from django.contrib import admin
from .views import signup, pagelogin
urlpatterns = [
    url(r'^signup$', signup, name='signup'),
    url(r'^login$', pagelogin, name='login'),   
]

Таким образом мы перейдём на страницу входа с URL-адресом http://IP_address/siteusers/login

Файл views.py

Напоследок обратимся к нашему файлу views.py, содержимое которого показано ниже:

from django.shortcuts import render
from .forms import Signupform, Loginform
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login

def pagelogin(request):

    uservalue=''
    passwordvalue=''

    form= Loginform(request.POST or None)
    if form.is_valid():
        uservalue= form.cleaned_data.get("username")
        passwordvalue= form.cleaned_data.get("password")

        user= authenticate(username=uservalue, password=passwordvalue)
        if user is not None:
            login(request, user)
            context= {'form': form,
                      'error': 'The login has been successful'}
            
            return render(request, 'siteusers/login.html', context)
        else:
            context= {'form': form,
                      'error': 'The username and password combination is incorrect'}
            
            return render(request, 'siteusers/login.html', context )

    else:
        context= {'form': form}
        return render(request, 'siteusers/login.html', context)

Чтобы создать пользователя нам необходимо импортировать render для отображения страницы шаблона, форму Loginform из файла forms.py и User из django.contrib.auth.models.

После чего мы вызываем функцию pagelogin(). Вы можете называть функцию как угодно, только не называйте ее login(), так как в Django уже есть встроенная функция login(). Если вы назовете функциональное представление login(), Django не поймёт, на какую функцию вы ссылаетесь, и скрипт не будет работать, поэтому назовите эту функцию как-нибудь иначе.

Также у нас есть две переменные — uservalue и passwordvalue. Устанавливаем их значение равным пустым строкам, чтобы сделать переменные глобальными.

Далее мы создаём экземпляр form формы Loginform, которая была описана нами в файле forms.py.

Если форма верна, мы устанавливаем переменную uservalue равной полю username, а переменную passwordvalue равной полю password.

Затем мы аутентифицируем пользователя на основе предоставленного им имени пользователя и пароля. Django имеет встроенную функцию аутентификации.

Если пользователь существует (т.е. не None), то мы регистрируем пользователя с помощью функции login(). В эту функцию передаём запрос и пользователя.

Для простоты, в контекстный словарь передаем форму и сообщение об ошибке.

Если пользователя не существует, то это означает, что комбинация имени пользователя и пароля неверна.

Спасибо за внимание! Надеемся, что данная статья помогла вам.

Удачи!

Источник: How to Create a Login Page for a Website with Python in Django

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!