Автор оригинала: FreeCodeCapm Team.
от Мухаммеда Субхана Хан
В этом руководстве я покажу, как выполнить вход пользователя, выйти и регистрацию в Django. Весь код, который я опишу здесь, есть в этом github Репозиторий Отказ Этот учебник будет использовать Python 2.7 и Django 1.9.
Установка и структура проекта
Чтобы начать, запустите следующие команды с терминала:
django-admin startproject src cd src python manage.py startapp mysite python manage.py migrate
В двух словах, эти четыре команды создают новый проект Django с именем SRC, введите проект, создайте новое приложение, MySite, внутри проекта SRC, затем создайте базу данных SQLite для проекта с именем DB.SQLite3. Также обязательно включите приложение MySite внутри SRC/Settings.py.
INSTALLED_APPS = [ 'src', 'django.contrib.admin', 'django.contrib.auth', ... ]
Создайте каталог с именованными шаблонами внутри приложения Mysite. Затем создайте два других каталога внутри MySite/Templates по имени «Регистрация» и «MySite».
Кроме того, я буду ссылаться на шаблоны, хранящиеся в этих двух каталогах, используя регистрацию/{template_name} и mysite/{template_name}.
Ваша структура проекта должна в конечном итоге выглядеть так:
. |-- db.sqlite3 |-- manage.py |-- mysite | |-- admin.py | |-- apps.py | |-- __init__.py | |-- migrations | | `-- __init__.py | |-- models.py | |-- templates | | |-- mysite | | `-- registration | |-- tests.py | `-- views.py `-- src |-- __init__.py |-- settings.py |-- urls.py `-- wsgi.py
Вы уже можете выяснить, что могут быть использованы шаблоны в MySite (просмотры, определенные в MySite, например). Мы доберемся до важности регистрации в ближайшее время.
Также нам понадобятся пользователи для проверки нашего сайта. Вы можете сделать это, создавая суперпользователь ( Python Manage.py CreatesuperUser
). Но не волнуйтесь – все, что описывает это учебное пособие, может быть применено к нормальным пользователям, без каких-либо изменений. Вы можете создавать нормальные пользователи с целью этого урока, создав суперпользователь, запустив свой сервер разработки ( Python Manage.py Runserver
), навигации к localhost: 8000/admin, навигации к пользователям, затем создание нового пользователя.
Обработка входа в систему
Согласно документации, Django предоставляет Виды Для обработки методов аутентификации пользователя, таких как вход в систему, выходы и восстановление пароля. Это экономит нам неприятности, чтобы пройти определение наших собственных взглядов на обработку этих вещей. Кроме того, эти взгляды довольно настраиваются и включены в Django.contrib.auth.views, которые мы импомнем следующим образом:
from django.contrib.auth import views as auth_views
Мы хотим открывать страницу входа в систему, когда пользователь переходит/войти. Использовать Вход Просмотр добавить следующее в SRC/URLS.PY
url(r'^login/$', auth_views.login),
Вид по умолчанию отображает шаблон, который находится в регистрации/вхождении .HTML.
Наша регистрация/login.html включает в себя следующую простую HTML-форму:
Login
Не хотите использовать регистрацию/login.html? Вы можете указать, какие шаблоны использовать, предоставив словарь Python в качестве третьего параметра в URLPattern, с «Template_Name» в качестве ключа и расположение шаблона в качестве значения. Если вы хотите использовать MySite/login_user.html в качестве шаблона:
url(r'^login/$', auth_views.login, {'template_name': 'mysite/login_user.html'})
Кроме того, вы также можете использовать другие аргументы вида, в значительной степени так же. Для полного списка аргументов, обратитесь к Документы Отказ
Когда пользователь нажимает на кнопку «Отправить», Вход в систему обрабатывает для нас вход. После того, как пользователь вошел в систему, мы можем определить, где на странице необходимо перенаправить, указав login_redirect_url в src/settings.py. По умолчанию мы будем перенаправлены на/войти, если логин не удается.
LOGIN_REDIRECT_URL = '/'
Теперь запустите сервер разработки ( Python Manage.py Runserver
) и перейдите к localhost: 8000/login/. Введите учетные данные пользователя для вашего примера суперпользователя. Вы будете перенаправлены на/если вход был успешным. В противном случае вы будете перенаправлены на/логин.
Даже если ваш логин был успешным, вы будете перенаправлены в/и увидеть ошибку. Это произойдет, потому что мы не определили URLPattern
для этого.
Обработка выхода из системы
Далее мы хотим, чтобы пользователи выходили в систему, когда они перемещаются на/выйти. Мы можем продлить ту же аналогию в качестве входа в систему для выхода, доступ к представлению, соответствующему Выход из системы Применяя следующую URLPattern в SRC/settings.py
url(r'^logout/$', auth_views.logout)
View Logout отображает шаблон регистрации/регистрации_out.html по умолчанию. Вот простой шаблон выхода из системы:
You have successfully logged out. Home
Как и в случае входа в систему, вы можете изменить местоположение шаблона, включая объект с ключом «Template_Name» и местоположением шаблона в качестве значения.
Зарегистрироваться
Мы хотим, чтобы наши пользователи регистрируем на нашем веб-сайте, навигацию на/регистрируйте. Прежде чем делать это, давайте немного очистим проект. Прежде всего, мы хотим URLPattern
Для нашей домашней страницы/. Мы собираемся использовать приложение Mysite для этой цели, поэтому добавьте следующее в SRC/URLS.PY
url(r'^', include('mysite.urls'))
Теперь нам нужно включить URLPattern
для/в mysite/urls.py, поэтому включите следующее URLPattern
В нем (после импорта соответствующих библиотек)
from django.conf.urls import url, include from django.contrib import admin from .views import home, register urlpatterns = [ url(r'^$', home), url(r'^register/', register), ]
Здесь Главная
относится к представлению для/и Регистрация
Относится к представлению для обработки регистрации. Для создания формы регистрации пользователя мы будем использовать встроенные формы Django. Для этого создайте файл mysite/forms.py и включите следующее:
from django import forms class UserRegistrationForm(forms.Form): username = forms.CharField( required = True, label = 'Username', max_length = 32 ) email = forms.CharField( required = True, label = 'Email', max_length = 32, ) password = forms.CharField( required = True, label = 'Password', max_length = 32, widget = forms.PasswordInput() )
Во-первых, мы импортируем библиотеку форм, мы создаем UserregistrationForm
, который наследует от Формас.form
Отказ Мы хотим, чтобы наши формы были 3 поля: Имя пользователя
, Email
, пароль
и переменные задания делают только что. Формасс.charfield
представляет собой поле, состоящее из символов. Аргументы – Требуется
, max_length
и этикетка
– Укажите, требуется ли поле, это максимальная длина, а метка поля. Параметр виджета в пароль
говорит, что пароль
это вход типа «пароль».
Мы хотим, чтобы пользователи могли просматривать форму, если они переходят на/регистрируют, а также заполните его и отправить ее. Они соответствуют получению и размещению запросов/регистрируются. Таким образом, мы включаем следующее в MySite/Views.py:
from django.shortcuts import render from django.contrib.auth.models import User from django.contrib.auth import authenticate, login from django.http import HttpResponseRedirect from django import forms from .forms import UserRegistrationForm # Create your views here. def home(request): return render(request, 'mysite/home.html') def register(request): if request.method == 'POST': form = UserRegistrationForm(request.POST) if form.is_valid(): userObj = form.cleaned_data username = userObj['username'] email = userObj['email'] password = userObj['password'] if not (User.objects.filter(username=username).exists() or User.objects.filter(email=email).exists()): User.objects.create_user(username, email, password) user = authenticate(username = username, password = password) login(request, user) return HttpResponseRedirect('/') else: raise forms.ValidationError('Looks like a username with that email or password already exists') else: form = UserRegistrationForm() return render(request, 'mysite/register.html', {'form' : form})
Представление дома определяется для рендеринга шаблона SRC/Home.html, что выглядит следующим образом:
Home {% if user.is_authenticated %}hello
welcome {{ user.username }}
{% else %} {% endif %}
Мы проверяем, вошел ли пользователь, используя User.is_authententicate и отобразить наш приветственный текст вместе с именем пользователя (используя user.username
) вместе со ссылкой на вынос. Если нет, мы будем отображать ссылки для входа в систему и регистрацию.
Для представления реестра мы проверяем, является ли метод запроса пост или нет. Если это не так, то указываем форму, чтобы быть UserregistrationForm
И визуализируйте, это, передавая его в качестве параметра в MySite/Register.html шаблон:
Форма, которая передается в качестве ввода к представлению регистра, затем отображается с использованием form.as_p
Отказ Когда пользователь нажимает кнопку отправки, отправляется запрос на запись. Мы принимаем данные формы, используя переменную формы.
Затем мы проверяем, действителен ли данные формы (через IS_Valid () ). Если это так, мы создаем userobj
словарь, который мы получаем, применяя Cleaned_data к форме и извлечению Имя пользователя
, Email
и пароль
от него.
В нашей базе данных существует условие. Если это так, мы создаем новый пользователь, войти в систему, используя тот же пользователь и перенаправить на/. В противном случае мы поднимаем ошибку, сказав, что такой пользователь уже существует.
Вот некоторые соответствующие документации на случай, если вы застряли, или хотите узнать больше:
Если вы хотите дать мне отзыв об этом руководстве, Свяжитесь со мной Отказ
Если вам понравилось этот пост, пожалуйста, ♡ это и поделиться этим:)