ثبت نام یا Sign Up

جنگو

سلام

به عنوان اولین گام باید یک Url برای صفحۀ ثبت نام تعریف کنیم.

myproject/urls.py

برای جلوگیری از تصادم بین فایل‌های ویوی برنامه های مختلف، به روش زیر یک نام مستعار برای ویوی اکانت تعریف می کنیم.

مرحلۀ بعدی ساخت یک تابع درون فایل ویو و با نام sign up است.

accounts/views.py

این تابع به قالب html ارجاع شده و بنابراین می بایست آن را ایجاد کنیم.

templates/signup.html

(یادمان باشد که قالب‌های پروژه از برنامه های پروژه مستقل بوده و ارتباطی با هم ندارند. به تعبیر دیگر ما در این صفحه از base.html که درون همان فولدر قرار دارد استفاده کرده ایم.)

در مرورگر آدرس http://127.0.0.1:8000/signup را باز می کنیم.

 

و مثل همیشه نوبت به نوشتن برنامۀ تست می رسد.

accounts/tests.py

و حالا تستِ تست!

و این هم از خروجی:

در تمام صفحات اعتبارسنجی نمی خواهیم منوی بالایی در قسمت breadcrumb وجود داشته باشد و باز با این حال می توان از قالب html با اندکی تغییر استفاده نمود.

templates/base.html

در فایل بالا سعی کردیم تا با بلوکه بندی این قالب صرفاً در صفحۀ ثبت نام از بخشی از آن استفاده کنیم که به کارمان می آید.

در این راستا از بلوک {% block stylesheet %}{% endblock %} برای استفاده از CSSهای اضافه بهره برداری کرده ایم.

بلوک بعدی مربوط به {% block body %} می شود که با تگ {% endblock body %} پایان یافته است.

حالا در فایل signup.html تگ {% block content %} را به {% block body %} تغییر می دهیم.

templates/signup.html

و با این کار خروجی به شکل زیر تغییر می یابد.

حالا که تنظیمات اولیه اعمال شد نوبت به آن رسیده تا فرم ثبت را بسازیم. برای این کار از یکی از فرم‌های موجود در جنگو به نام UserCreationForm استفاده می کنیم.

accounts/views.py

فایل قالب هم به شکل زیر می شود.

templates/signup.html

خروجی:

نکته مهم این است که ما در فایل ویو، از تابع ()UserCreationForm استفاده و آن را به قالب signup.html پارس کرده ایم و به همین دلیل جنگو می فهمد که به چه فیلدهایی احتیاج دارد.

گام بعدی آن است که این فرم را کمی زیبا و مرتب کنیم که البته این کار را قبلاً در قالب html انجام داده بودیم.

همانطور که در خروجی مشخص است یک سری از تگ های HTML به صورت خام در صفحه نمایش داده می شود. علت این کار آن است که جنگو به دلیل مسائل امنیتی و برای جلوگیری از ارسال تگ‌ها به صورت غیرمجاز، تمام کارکترهای عملگر را نادیده می گیرد. اما در این فرم می توان به این کارکترهای خاص اعتماد کرد!

templates/includes/form.html

در فایل جدید، با اضافه کردن دستور safe به عبارت field.help_text، آن را به {{ field.help_text|safe }} تغییر داده ایم.

و به همین راحتی فرم زیبا می شود!

گام بعدی آن است که فرم ثبت نام واقعاً ثبت نام کند! و یک سری فیلد خشک و خالی نباشد.

accounts/views.py

(تابع login را به نام مستعار auth_login تغییر داده ایم تا با ویوی لاگین پیش فرض جنگو دچار تصادم نشود.  البته ویوی لاگین در ورژن‌های جدید تغییر نام داده و حتی اگر این گونه نامگذاری نشود هم به مشکلی بر نمی خوریم اما کلاً خوب است که برای نام‌ها یک پیشوند در نظر بگیریم تا هم درک کدمان بهتر شود و هم از تصادم جلوگیری شود.)

اگر فرم معتبر باشد با استفاده از user = form.save() یک یوزر جدید برایش ایجاد می شود. سپس یوزرِ ساخته‌شده با استفاده به عنوان یکی از آرگومان‌های تابع auth_login ارسال می شود. بعد از آن هم کاربر به صفحۀ اصلی ریدایرکت می شود.

حالا نوبت به تست عملی می رسد. می خواهیم داده های غیر معتبر یا فیلدهای خالی یا فیلدهای غیراستاندارد یا یوزرنیم‌های موجود در برنامه را به عنوان ورودی های فرم به آن ارسال کنیم.

حالا فرم را تکمیل می کنیم. می خواهیم ببینیم آیا با تکمیل درست فرم، کاربر ساخته می شود و آیا به صفحۀ اصلی ریدایرکت می شود یا خیر.

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: ارجاع دهی به کاربران معتبر در قالب

مطلب قبلی: تنظیمات اولیه

بدون دیدگاه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
ویوی تکمیل بازیابی پسورد

سلام ساخت فایل قالب: templates/password_reset_complete.html {% extends ‘base_accounts.html’ %} {% block title %}Password changed!{% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-6 col-md-8 col-sm-10″> <div class=”card”> <div class=”card-body”> <h3 class=”card-title”>Password changed!</h3> <div class=”alert alert-success” role=”alert”> You have successfully changed your password! You may now proceed to log …

جنگو
ویوی تأیید بازیابی پسورد

سلام نوشتن فایل قالب به شکل زیر: templates/password_reset_confirm.html {% extends ‘base_accounts.html’ %} {% block title %} {% if validlink %} Change password for {{ form.user.username }} {% else %} Reset your password {% endif %} {% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-6 col-md-8 col-sm-10″> <div …

جنگو
ویوی شروع بازیابی پسورد

سلام نوشتن فایل قالب به ترتیب زیر: templates/password_reset_done.html {% extends ‘base_accounts.html’ %} {% block title %}Reset your password{% endblock %} {% block content %} <div class=”row justify-content-center”> <div class=”col-lg-4 col-md-6 col-sm-8″> <div class=”card”> <div class=”card-body”> <h3 class=”card-title”>Reset your password</h3> <p>Check your email for a link to reset your password. If …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.