Рубрики
Без рубрики

Создание части страницы регистрации I

Здравствуйте, рад видеть вас здесь снова. В сегодняшней части серии мы собираемся создать регистрацию … с меткой Python, Django, Webdev, Codenewbie.

Django Registration/Login App (10 серии деталей)

Здравствуйте, рад видеть вас здесь снова. В сегодняшней части серии мы собираемся создать страницу регистрации.

Хорошо, чтобы создавать пользователей, нам нужна модель правильно, нам нужно определить, какие атрибуты должны иметь пользователи. Django поставляется со встроенной пользовательской моделью, основные атрибуты которых:

  • имя пользователя
  • пароль
  • Эл. адрес
  • Имя
  • фамилия

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

Затем нам нужна форма, которая будет отображаться для пользователей, проверить данные и сохранить их в базе данных. К счастью, нам не нужно переосмыслить колесо, потому что у Джанго есть встроенная встроенная в использовании пользовательский процесс.

UserCreationForm – это форма, которая создает пользователя без привилегий, из данного имени пользователя и пароля. – док

  • Выглядит хорошо, но что, если мы хотим включить дополнительные поля в нашу форму и получить другую информацию об пользователе при регистрации?

Для этого мы можем просто расширить встроенную форму модели и добавить больше полей. Я собираюсь добавить электронную почту, первое имя и lastname пользователя.

Не забывайте, что поля, которые добавляют, уже находятся в модели пользователя

Создайте модуль Forms.py внутри приложения пользователей и сначала давайте импортируем необходимые зависимости.

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
  • Формы в Джанго – это класс, чьи поля отображают элементы HTML формы.
  • Класс форм имеет разные поля для обработки различных типов данных. Например, Charfield, Damefield … Проверьте Документы Здесь, чтобы посмотреть на большее из этих полей.
  • Эти поля формы представлены пользователю в виде виджета HTML (виджеты рендеринг html -элементов формы), поэтому, если мы явно не указам виджет для нашего поля формы, Django будет использовать виджеты по умолчанию, которые могут выглядеть не так хорошо.
  • Переопределяя виджет по умолчанию для поля формы, мы можем загрузить наши поля формы.

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class RegisterForm(UserCreationForm):
    # fields we want to include and customize in our form
    first_name = forms.CharField(max_length=100,
                                 required=True,
                                 widget=forms.TextInput(attrs={'placeholder': 'First Name',
                                                               'class': 'form-control',
                                                               }))
    last_name = forms.CharField(max_length=100,
                                required=True,
                                widget=forms.TextInput(attrs={'placeholder': 'Last Name',
                                                              'class': 'form-control',
                                                              }))
    username = forms.CharField(max_length=100,
                               required=True,
                               widget=forms.TextInput(attrs={'placeholder': 'Username',
                                                             'class': 'form-control',
                                                             }))
    email = forms.EmailField(required=True,
                             widget=forms.TextInput(attrs={'placeholder': 'Email',
                                                           'class': 'form-control',
                                                           }))
    password1 = forms.CharField(max_length=50,
                                required=True,
                                widget=forms.PasswordInput(attrs={'placeholder': 'Password',
                                                                  'class': 'form-control',
                                                                  'data-toggle': 'password',
                                                                  'id': 'password',
                                                                  }))
    password2 = forms.CharField(max_length=50,
                                required=True,
                                widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password',
                                                                  'class': 'form-control',
                                                                  'data-toggle': 'password',
                                                                  'id': 'password',
                                                                  }))

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'username', 'email', 'password1', 'password2']
  • Я добавил идентификатор для полей пароля, потому что мы собираемся использовать плагин, который показывает значок «скрыть/отображать/показать» – вы знаете, что странно выглядящий значок глаз. Но подробнее об этом позже, когда мы создаем шаблон.
  • В рамках мета -класса мы можем создать связь между полями нашей модели и различными областями, которые мы хотим иметь в нашей форме (вопросы порядка).

Хорошо! Давайте отправимся в views.py и используйте только что созданную, которую мы только что создали.

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

views.py

from django.shortcuts import render, redirect 
from django.contrib import messages
from django.views import View

from .forms import RegisterForm


class RegisterView(View):
    form_class = RegisterForm
    initial = {'key': 'value'}
    template_name = 'users/register.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)

        if form.is_valid():
            form.save()

            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}')

            return redirect(to='/')

        return render(request, self.template_name, {'form': form})
  • Сначала переопределив form_class атрибут, мы можем сказать Джанго, какую форму использовать, Имя Шаблона -> Шаблон, который мы хотим, чтобы Джанго искал
  • Если запрос получен, он создает новый экземпляр пустой формы.
  • Если запрос является Post, – он создает новый экземпляр формы с данными POST. Затем проверяет, действительна ли форма или не позвонив form.is_valid () метод – Затем, если форма действительна, обработайте данные очищенной формы и сохраните пользователя в нашей базе данных.
  • Чтобы пользователь знал, что его/ее учетная запись успешно создана, мы можем генерировать флэш -сообщение и отобразить его/ее имя пользователя на странице, на которую они перенаправляют (домашняя страница).

Затем давайте сопоставляем наши UrlPatterns с нашим представлением регистра.

пользователи/urls.py

from django.urls import path
from .views import home, RegisterView  # Import the view here

urlpatterns = [
    path('', home, name='users-home'),
    path('register/', RegisterView.as_view(), name='users-register'),  # This is what we added
]

Это становится немного долго, поэтому мы создадим шаблон в следующей части.

Спасибо за ваше время, вы можете найти готовое приложение в GitHub Анкет

Не стесняйтесь спрашивать, и любые предложения приветствуются. До встречи!

Django Registration/Login App (10 серии деталей)

Оригинал: “https://dev.to/earthcomfy/creating-a-django-registration-login-app-part-ii-3k6”