احراز هویت کاربر در جنگو 2/3

در آموزش قبلی login و logout در جنگو را توضیح دادم در این آموزش قراره پروسه ثبت نام برای کاربرهای جدید را آموزش بدم.

اپ auth در جنگو به صورت پیش ساخته برای ما view ها و url هایی رو برای login , logout فراهم کرده.تنهای کاری که ما باید بکنیم ساختن قالب برای این ویوها است.اما برای پروسه ثبت نام ما باید view و url مورد نیاز خودمون رو بسازیم.

سورس کامل برنامه رو میتونید در اینجا پیدا کنید.

اپ accounts

ازونجایی باید برای ثبت نام view و url خودمون رو بسازیم نیاز داریم اپ اختصاصی خودمون رو هم بسازیم. اسم اپ رو accounts میزاریم.

1(accounts) $ python manage.py startapp accounts

اسم اپ جدید رو حتما به لیست INSTALLED_APPS در فایل config/settings.py اضافه کنید.

12345678910# config/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts', # new
]

حالا url اپ accounts را به url پروژه اصلی وصل کنید.

1234567891011# config/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('accounts.urls')), # new
    path('accounts/', include('django.contrib.auth.urls')),
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
]

ازونجایی که در اپ های ساخته شده فایل urls.py وجود ندارد. ابتدا باید این فایل رو بسازیم.

1(accounts) $ touch accounts/urls.py

و حالا کدهای زیر رو درفایل urls.py بنویسید.

123456789# accounts/urls.py
from django.urls import path

from .views import SignUpView


urlpatterns = [
    path('signup/', SignUpView.as_view(), name='signup'),
]

حالا ویو SignUpView رو میسازیم.

12345678910# accounts/views.py
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 = 'registration/signup.html'

دراینجا برای ساخت ویو ثبت نام از کلاس CreateView ارث بری کردیم که ویویی هست که با استفاده از فرم های خودش به ما اجازه ساخت اشیاَ رو میده. در این کلاس از سه اتریبیوت استفاده کردیم:

  • form_class: مشخص میکنیم از چه فرمی برای ثبت داده استفاده کنه ما اینجا از UserCreationForm استفاده میکنیم که یک فرم پیش ساخته توسط جنگو و برای ثبت نام استفاده میشه اما میتونیم از فرم های شخصی سازه شده هم استفاده کنیم.
  • success_url: در این اتریبیوت مشخص میکنیم بعد از ثبت موفقیت آمیز داده به کدام صفحه ریدایرکت بشیم.
  • template_name: و درنهایت در این اتریبیوت مشخص میکنیم داده ها در کدوم قالب به نمایش دربیان

چرا دراینجا به جای reverse از reverse_lazy استفاده میکنیم؟

همیشه زمانی که از generic class-based views ها استفاده میکنیم باید از reverse_lazy استفاده کنیم دلیلش هم اینه که زمانی ازون url استفاده میشه که نیاز باشه به عبارت دیگه دراینجا وقتی کاربر پروسه ثبت نام رو به درستی انجام میده و داده ها به سمت سرور فرستاده شده و تایید شدن به صفحه login ریدارکت میشه. اگه قبلا درسایتی ثبت نام کرده باشید توجه کردید که بعد از ثبت اطلاعاتتون به صفحه ورود فرستاده میشید.

و حالا در مرحله آخر قالب signup.html را در مسیر templates/registration میسازیم.

1(accounts) $ touch templates/registration/signup.html

کدهای زیر را داخل فایل بنویسید.

12345678910111213<!-- templates/registration/signup.html -->
{% extends 'base.html' %}

{% block title %}Sign Up{% endblock %}

{% block content %}
  <h2>Sign up</h2>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Sign Up</button>
  </form>
{% endblock %}

و تمام! برای اطمینان از درستی مراحل با دستور python manage.py runserver سرور جنگو رو فعال کنید و به آدرس http://127.0.0.1:8000/accounts/signup/ بروید.

راهنمایی هایی در کنار username و password قرار داره که ما میتونیم اونا رو شخصی سازی و فارسی سازی کنیم که در آموزش های بعدی توضیح میدم. حالا اطلاعات خودتون رو وارد کنید و کلید Sign up بزنید شما به صفحه login ریدایرکت میشید http://127.0.0.1:8000/accounts/login/ در اینجا شما میتوانید وارد حساب جدید خودتون بشید.

در سری بعدی این آموزش قراره ریست کردن پسورد در جنگو رو آموزش بدم.

خوشحال میشم نظراتتون رو بشنوم تا بتونم باعث بهبود این آموزش ها بشم.همچنین میتونید در سایت pythonheroes.ir چیزای بیشتری راجع به جنگو و پایتون یاد بگیرید.

منبع

learndjango.com

نویسنده مطلب: ایوب غلامی

منبع مطلب

به فکر سرمایه‌گذاری هستی؟

با هر سطحی از دانش در سریع‌ترین زمان با آموزش گام به گام، سرمایه گذاری را تجربه کن. همین الان میتونی با لینک زیر ثبت نام کنی و ۱۰ درصد تخفیف در کارمزد معاملاتی داشته باشی

ثبت نام و دریافت جایزه
ممکن است شما بپسندید
نظر شما درباره این مطلب

آدرس ایمیل شما منتشر نخواهد شد.