021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

ساخت صفحه ورود و خروج کاربر در جنگو

با سلام خدمت تمامی شما مخاطبان خوب وبسایت پایتونی ها با یک مقاله آموزشی دیگه در خدمت شما دوستان خوبمون هستیم از سری مقاله های آموزشی طراحی وبسایت با جنگو در این مقاله به مبحث ساخت صفحه ورود و خروج در جنگو با هم خواهید پرداخت.

 

مقدمه

جنگو یکی از پر استفاده ترین فریم ورک های طراحی سایت در  زبان برنامه نویسی پایتون است که هر روز استفاده متداول از آن نیز بیشتر می شود اما اولین مورد که بعد از شروع کار با فریم ورک جنگو اتفاق میوفتد مدیریت کاربران است، که قبل از این که اصلا شما کاربری داشته باشید باید کاربران بتوانند وارد وبسایت و از وبسایت خارج شوند در نتیجه اولین موضوعی که برای هر کسی پیش می آید صفحه ورود و یا خروج برای کاربران است.

 

برای ساخت صفحه های ورود و خروج کاربران روش های متداولی وجود دارد که ما در این مقاله سعی کردیم ساده ترین روش آن را برای شما به اشتراک بگذاریم.

ما در این آموزش فرض می کنیم که شما قبلاً با نحوه پیکربندی یک پروژه جنگو آشنا هستید. اگر به کمک نیاز دارید، لطفاً به این آموزش مراجعه کنید.

 

خوب ما فرض را برای پروژه جنگویی خودمان میگیریم که پروژه ما در Desktop قرار دارد و به صورت زیر عمل خواهیم کرد:

$ cd ~/Desktop
$ mkdir accounts && cd accounts
$ pipenv install django~=3.1.0
$ pipenv shell
(accounts) $ django-admin.py startproject config .
(accounts) $ python manage.py migrate
(accounts) $ python manage.py runserver

توضیح کد بالا :

در ابتدا به دایرکتوری در مسیر Desktop خواهیم رفت، سپس با استفاده از دستور Mkdir یک فولدر می سازیم و بعد وارد آن فولدر می شویم.

در خطر بعد با استفاده از دستور pipenv install django شروع به نصب جنگو نسخه 3.1 کرده و سپس با استفاده از دستور pipenv shell وارد محیط مجازی سازی فولدر accounts می شویم.

در مرحله بعد با استفاده از دستور migrate دیتابیس را در جنگو ست می کنیم و در مرحله آخر با استفاده از دستور Runserver سرور اصلی جنگو را راه اندازی می کنیم.

 

آموزش جنگو

بعد از اجرا دستورات بالا باید صفحه مقابل را در مرورگر خود با استفاده از ادرس زیر ببینید:

http://127.0.0.1:8000

 

 

نصب نرم افزار احراز هویت در جنگو

همانطور که می دانید جنگو دارای کتابخانه های داخلی زیادی است که استفاده از آن ها به راحتی آب خوردن است، یکی از این کتابخانه ها django.contrib.auth نام دارد که به صورت خود کار با نصب جنگو نصب می شود.

برای که از نصب بودن این کتابخانه مطمعن شوید می توانید با استفاده از فایل setting.py که در فولدر اصلی پروژه وجود دارد به قسمت INSTALLED_APPS مراجعه کرده و باید یک لیست مانند لیست زیر را مشاهده کنید :

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

 

برای استفاده از برنامه auth باید آن را به فایل urls.py در سطح پروژه خود اضافه کنیم. حتماً در خط دوم include را باید اضافه کنید. من در این قسمت ادرس ها کاربران را به صورت دلخواه زیر تغییر دادم شما می توانید به صورت دلخواه آدرس های زیر را تغییر دهید.

# config/urls.py
from django.contrib import admin
from django.urls import path, include # new

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')), # new
]

 

زمانی که شما ادرس های بالا ست کرده اید چندین نوع صفحه به صورت زیر در دسترس شما قرار می گیرد و شما می توانید با استفاده از ادرس های زیر وارد آن ها شوید:

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']

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

 

صفحه ورود

بیایید صفحه ورود خود را بسازیم! جنگو به‌طور پیش‌فرض در پوشه templates به نام registration برای قالب‌های احراز هویت استفاده می‌کند. قالب لاگین login.html نام دارد.

  • یک دایرکتوری جدید به نام  registration ایجاد کنید
  • و سپس در این فولدر یک فایل با نام login.html بسازید.
(accounts) $ mkdir templates
(accounts) $ mkdir templates/registration
(accounts) $ touch templates/registration/login.html

توجه: مطمئن شوید فولدر ها و فایل ها را به درست می سازید در صورتی که اسم فولدر ها و یا فایل ها و اگر در جایی اشتباهی ساخته شوند نرم افزار شما با ارور مواجه خواهد شد.

 

بعد از ساخت فایل بالا می توانید کد زیر را در فایل login.html قرار دهید:

<!-- templates/registration/login.html -->
<h2>Log In</h2>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log In</button>
</form>

این یک فرم استاندارد جنگو است که از متود POST برای ارسال داده‌ها و برچسب‌های {% csrf_token %} برای نگرانی‌های امنیتی، یعنی جلوگیری از حمله CSRF استفاده می‌کند.

محتویات فرم به لطف {{ form.as_p }} بین تگ های پاراگراف خروجی می گیرد و سپس دکمه “submit” را اضافه می کنیم.

 

در مرحله بعد باید با استفاده از قسمت setting.py در قسمت TEMPLATES در قسمت DIRS تیکه زیر را به آن اضافه کنید مانند :

# config/settings.py
TEMPLATES = [
    {
        ...
        'DIRS': [str(BASE_DIR.joinpath('templates'))],
        ...
    },
]

 

عملکرد Login ما اکنون کار می کند، اما برای بهتر شدن آن، باید مشخص کنیم که کاربر پس از ورود موفق به کجا هدایت شود. به عبارت دیگر پس از ورود کاربر به کجا باید در سایت ارسال شود؟

ما از تنظیمات LOGIN_REDIRECT_URL برای تعیین این مسیر استفاده می کنیم. در پایین فایل settings.py موارد زیر را اضافه کنید تا کاربر به صفحه اصلی هدایت شود.

 

# config/settings.py
LOGIN_REDIRECT_URL = '/'

 

خوب به سلامتی شما تونستید یک صفحه لوگین را راه اندازی کنید !!!

اگر سرور جنگو را دوباره با سرور python manager.py راه اندازی کنید و به صفحه ورود به سیستم ما در http://127.0.0.1:8000/accounts/login/ بروید، موارد زیر را مشاهده خواهید کرد.

 

 

صفحه خروج

می خواهیم یک پیوند خروج به صفحه خود اضافه کنیم تا کاربران بتوانند به راحتی بین این دو حالت جابجا شوند. خوشبختانه اپلیکیشن Django auth در حال حاضر یک URL و نمای داخلی برای این کار در اختیار ما قرار می دهد. و اگر در مورد آن فکر می کنید، ما نیازی به نمایش چیزی در هنگام خروج نداریم، بنابراین نیازی به الگو نیست. تمام کاری که واقعاً بعد از یک درخواست “خروج” موفق انجام می دهیم، هدایت به صفحه دیگری است وسلام.

 

پس بیایید ابتدا پیوندی به آدرس اینترنتی خروج داخلی در فایل home.html خود اضافه کنیم:

<!-- templates/home.html-->

{% block content %}
{% if user.is_authenticated %}
  Hi {{ user.username }}!
  <p><a href="{% url 'logout' %}">Log Out</a></p>
{% else %}
  <p>You are not logged in</p>
  <a href="{% url 'login' %}">Log In</a>
{% endif %}
{% endblock %}

 

سپس در فایل settings.py را با پیوند تغییر مسیر ما که LOGOUT_REDIRECT_URL نام دارد، به روز کنید:

# config/settings.py
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/' # new

 

در واقع، اکنون که نمای صفحه اصلی داریم، باید از آن به جای رویکرد کدگذاری شده فعلی خود استفاده کنیم. نام url صفحه اصلی ما چیست؟ این خانه است که در فایل config/urls.py نام آن را گذاشتیم:

# config/urls.py
    ...
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
    ...

 

بنابراین می‌توانیم «/» را با home در پایین فایل settings.py جایگزین کنیم:

# config/settings.py
LOGIN_REDIRECT_URL = 'home'
LOGOUT_REDIRECT_URL = 'home'

 

اکنون اگر دوباره از صفحه اصلی بازدید کنید و وارد شوید، به صفحه اصلی جدیدی هدایت می شوید که دارای پیوند “Logout” برای کاربران وارد شده است.

 

با کلیک کردن بر روی آن به صفحه اصلی با پیوند “ورود” باز می گردید.

 

نتیجه گیری
با کد بسیار کم، ما یک سیستم احراز هویت ورود و خروج قوی داریم.  برنامه auth بسیاری از کارهای سنگین را برای ما انجام داده است. یکی از چیزهای خوب در مورد جنگو این است که در حالی که عملکردهای زیادی را به صورت خارج از جعبه ارائه می دهد، به گونه ای طراحی شده است که قابل تنظیم نیز باشد.

محمدرضا حسنی

224 مطلب منتشر شده

دانش آموخته رشته فناوری اطلاعات / موسس پایتونی ها

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3
%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
2