مقدمه
در این درس، ما یک سیستم کامل برای مدیریت حسابهای کاربری به اپلیکیشن خود اضافه میکنیم.
Django
بسیاری از قابلیتهای مورد نیاز برای احراز هویت (authentication) و مدیریت مجوزها (authorization)
را به صورت آماده فراهم میکند. ما از این قابلیتها برای ایجاد صفحات ورود (login)، خروج (logout)
و ثبتنام (registration) استفاده خواهیم کرد.
ایجاد اپلیکیشن users
برای سازماندهی بهتر، ما تمام منطق مربوط به کاربران را در یک اپلیکیشن جداگانه به نام users
قرار میدهیم.
(ll_env) $ python manage.py startapp users
سپس، این اپلیکیشن جدید را به لیست INSTALLED_APPS در فایل settings.py پروژه اصلی
اضافه
میکنیم.
learning_log/settings.py
INSTALLED_APPS = [
# ... other apps
'learning_logs',
'users',
]
ساخت صفحات ورود و خروج
برای ساخت صفحات ورود و خروج، کافی است تمپلیتهای مورد نیاز را ایجاد کنیم. Django به طور پیشفرض
به دنبال تمپلیتهایی با نام registration/login.html و
registration/logged_out.html میگردد. ما فقط کافی است این فایلها را در مسیر
users/templates/registration/ بسازیم و آنها را مطابق نیاز خود ویرایش کنیم.
۱. تعریف URLها
ابتدا، الگوهای URL برای اپلیکیشن users را تعریف میکنیم. Django ویوهای پیشفرضی برای
ورود و خروج فراهم میکند که ما میتوانیم مستقیماً از آنها استفاده کنیم. یک فایل جدید به نام
users/urls.py بسازید.
users/urls.py
"""Defines URL patterns for users"""
from django.urls import path, include
app_name = 'users'
urlpatterns = [
path('', include('django.contrib.auth.urls')),
]
django.contrib.auth.urls شامل الگوهای URL پیشفرض برای ورود (/login/) و خروج (/logout/)
است. سپس، این فایل urls را به فایل urls.py اصلی پروژه متصل میکنیم.
۲. ساخت تمپلیت ورود
ویوی پیشفرض ورود Django به دنبال یک تمپلیت در مسیر registration/login.html میگردد. ما
این تمپلیت را ایجاد میکنیم.
users/templates/registration/login.html
{% extends "learning_logs/base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
<form method="post" action="{% url 'users:login' %}">
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Log in</button>
<input type="hidden" name="next" value="{% url 'learning_logs:index' %}" />
</form>
{% endblock content %}
این تمپلیت یک فرم ورود استاندارد را نمایش میدهد. Django به صورت خودکار یک فرم لاگین را به این
تمپلیت پاس میدهد.
صفحه ثبتنام
برای صفحه ثبتنام، باید یک ویو، URL و تمپلیت سفارشی بسازیم.
users/views.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def register(request):
"""Register a new user."""
if request.method != 'POST':
form = UserCreationForm()
else:
form = UserCreationForm(data=request.POST)
if form.is_valid():
new_user = form.save()
login(request, new_user)
return redirect('learning_logs:index')
context = {'form': form}
return render(request, 'registration/register.html', context)
این ویو از فرم داخلی Django به نام UserCreationForm برای مدیریت ثبتنام استفاده میکند. پس
از ثبتنام موفق، کاربر به صورت خودکار لاگین شده و به صفحه اصلی هدایت میشود.
در این درس، ما با استفاده از سیستم احراز هویت داخلی Django، یک فرآیند کامل برای ورود، خروج و
ثبتنام کاربران را پیادهسازی کردیم. این یک گام بزرگ در تبدیل وبلاگ ما به یک اپلیکیشن چندکاربره
است. در درس بعدی، به سراغ «امکان مالکیت داده توسط کاربر» خواهیم رفت و موضوعات و یادداشتها را به
کاربرانی که آنها را ایجاد کردهاند، متصل خواهیم کرد.