إعداد نظام تسجيل الدخول والخروج (Login and Logout) في Django يُعتبر من الأساسيات التي يحتاج إليها أي مطور لإنشاء تطبيقات ويب آمنة. نظام المصادقة المدمج في Django يوفر أدوات وطرقاً جاهزة للتعامل مع تسجيل الدخول، تسجيل الخروج، وإدارة الجلسات بطريقة سلسة وسهلة. في هذا المقال، سنشرح كيفية إعداد تسجيل الدخول والخروج في Django خطوة بخطوة مع الأمثلة.
لإنشاء نظام تسجيل الدخول/الخروج في Django، يمكنك اتباع التعليمات التالية خطوة بخطوة:
1. إنشاء مشروع وتطبيق Django جديد
أولاً، إذا لم يكن لديك مشروع Django جاهز، يجب أن تبدأ بإنشاء واحد. قم بفتح موجه الأوامر واتبع الخطوات التالية:
django-admin startproject myproject
cd myproject
python manage.py startapp accounts
بعد إنشاء المشروع، قم بإضافة التطبيق الجديد accounts إلى ملف settings.py داخل قائمة INSTALLED_APPS:
INSTALLED_APPS = [
# التطبيقات الأخرى
'accounts',
'django.contrib.auth',
'django.contrib.contenttypes',
]
2. إعداد النماذج (Forms) لتسجيل الدخول
لإعداد نموذج تسجيل الدخول، يمكنك استخدام النموذج الجاهز من Django، أو إنشاء نموذج مخصص باستخدام forms.py. هنا سنستخدم النموذج الجاهز من Django.
أضف ملف urls.py داخل مجلد التطبيق accounts إذا لم يكن موجودًا، وأضف المسار لتسجيل الدخول:
# accounts/urls.py
from django.urls import path
from django.contrib.auth import views as auth_views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name='login'),
]
في الخطوة التالية، تأكد من أن لديك قالب (Template) لتسجيل الدخول. أنشئ مجلدًا باسم templates داخل التطبيق accounts، ثم داخل هذا المجلد، أنشئ مجلدًا آخر باسم registration. هذا هو المسار الافتراضي للقوالب التي يستخدمها Django لتسجيل الدخول.
الآن أنشئ ملفًا جديدًا باسم login.html داخل المجلد registration:
<!-- accounts/templates/registration/login.html --> <h2>تسجيل الدخول</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">تسجيل الدخول</button> </form>
3. إعداد تسجيل الخروج (Logout)
لإعداد تسجيل الخروج في Django، لا تحتاج إلى إنشاء نموذج. ببساطة، يمكن إضافة مسار للخروج باستخدام وظيفة LogoutView الجاهزة في Django.
أضف المسار الخاص بالخروج في urls.py:
# accounts/urls.py from django.urls import path from django.contrib.auth import views as auth_views urlpatterns = [ path('login/', auth_views.LoginView.as_view(), name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), ]
ثم تحتاج أيضًا إلى إنشاء قالب لتأكيد تسجيل الخروج أو إعادة توجيه المستخدم إلى الصفحة الرئيسية بعد الخروج. يمكنك تخصيص ذلك بإضافة صفحة شكرًا لك بعد تسجيل الخروج.
4. إعداد التوجيه بعد تسجيل الدخول والخروج
بشكل افتراضي، Django يقوم بإعادة توجيه المستخدم بعد تسجيل الدخول إلى الصفحة التي كان يحاول الوصول إليها قبل تسجيل الدخول. ولكن إذا كنت ترغب في تخصيص ذلك وإعادة توجيه المستخدم إلى صفحة معينة، يمكنك تعديل الإعدادات في ملف settings.py.
لإعادة توجيه المستخدم بعد تسجيل الدخول إلى الصفحة الرئيسية، أضف السطر التالي:
# settings.py
LOGIN_REDIRECT_URL = '/'
ولإعادة توجيه المستخدم بعد تسجيل الخروج:
# settings.py
LOGOUT_REDIRECT_URL = '/'
5. حماية الصفحات التي تتطلب تسجيل الدخول
بعد إعداد تسجيل الدخول والخروج، قد ترغب في تقييد الوصول إلى بعض الصفحات فقط للمستخدمين المسجلين. يمكن القيام بذلك باستخدام LoginRequiredMixin أو @login_required.
إليك كيفية استخدام LoginRequiredMixin في Class-Based Views:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
class ProtectedView(LoginRequiredMixin, TemplateView):
template_name = 'protected.html'
أما إذا كنت تستخدم Function-Based Views، يمكنك استخدام login_required@:
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required
def protected_view(request):
return render(request, 'protected.html')
6. تخصيص نموذج تسجيل الدخول
إذا كنت بحاجة إلى تخصيص نموذج تسجيل الدخول، يمكنك إنشاء نموذج مخصص داخل forms.py. مثال على نموذج مخصص لتسجيل الدخول:
# accounts/forms.py
from django import forms
from django.contrib.auth.forms import AuthenticationForm
class CustomLoginForm(AuthenticationForm):
username = forms.CharField(label='اسم المستخدم', max_length=100)
password = forms.CharField(label='كلمة المرور', widget=forms.PasswordInput)
ثم يمكنك استخدام هذا النموذج في views.py:
# accounts/views.py
from django.contrib.auth.views import LoginView
from .forms import CustomLoginForm
class CustomLoginView(LoginView):
form_class = CustomLoginForm
template_name = 'registration/login.html'
ولا تنسَ تحديث المسار في urls.py ليشير إلى العرض (View) المخصص:
# accounts/urls.py
from django.urls import path
from .views import CustomLoginView
urlpatterns = [
path('login/', CustomLoginView.as_view(), name='login'),
]
7. تحسين الأمان
لتحسين أمان نظام المصادقة، يمكنك إضافة ميزات مثل تأمين كلمات المرور وإعادة تعيين كلمة المرور. يمكنك الاعتماد على الميزات المدمجة في Django لإرسال رسائل البريد الإلكتروني لإعادة تعيين كلمة المرور واستخدام مكتبة django-axes لتأمين الحسابات ضد الهجمات العنيفة.
الخاتمة
إعداد تسجيل الدخول والخروج في Django عملية سهلة بفضل الأدوات الجاهزة التي يوفرها الإطار. باتباع هذه الخطوات، يمكنك إعداد نظام مصادقة آمن وفعال لتطبيقك، مع إمكانية تخصيص العملية حسب احتياجات مشروعك. يمكنك أيضًا تحسين التجربة بإضافة صفحات مخصصة وتخصيص النماذج. تأكد دائمًا من مراجعة إعدادات الأمان الخاصة بك لحماية معلومات المستخدمين.