تسجيل الاعضاء

albaderمنذ 5 سنوات

في جانغو  او البرمجة عموما انت مخير في كثير من الطرق والنتيجة واحدة

 

اليوم نتكلم عن انشاء صفحة تسجيل الاعضاء  اعتمادا على الجدول المقدم من جانغو

الجدول افتراضي يأتي في جانغو اثناء انشاء المشروع وكتابة الامر

python manage.py migrate

ستلاحظ عند تنفيذه اول مره انه يقوم بانشاء جداول جديده من ضمنها جدول اليوزرات والجلسات الى اخره

 

لنبدأ طريقة انشاء تطبيق جديد خاص باليوزات

 

في البداية نقوم بانشاء تطبيق جديد باسم accounts  اختر الاسم الذي تراه يناسبك

python manage.py startapp accounts

 

وكما تعلمنا سنذهب الى ملف settings.py  لاضافة التطبيق الجديد ضمن التطبيقات

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # هنا بداية تطبيقاتنا الجديد 
    'accounts',
]

 

بعد ان قمنا باضافة التطبيق الجديد

سنذهب الى مجلد accounts  وسنقوم بانشاء ملف جديد باسم forms.py  لكي ننشئ الاستمارة الخاصة بتسجيل عضوية جديدة

نشرح الكود التالي

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm

class UserCreateForm(UserCreationForm):

    class Meta:
        fields = ('username', 'email', 'password1', 'password2')
        model = get_user_model()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].label = 'Display name'
        self.fields['email'].label    = 'Email Address'

السطر الاول والثاني هي مكتبات جاهزة داخل جانغو  السطر الاول هو المودل الخاص بالحقول الخاصة بالمستخدم

السطر الثاني مسؤول عن انشاء عضوية جديدة

 

من ثم قمنا باشناء كلاس جديد يرث كل خصائص UserCreationForm

بعدها حددنا الحقول التي نريد ان تظهر لليوزر اثناء التسجيل

fields = ('username', 'email', 'password1', 'password2')

اسم المستخدم , الايميل , الباس مكرر مرتين للتاكيد

 

بالامكان اضافة  الاسم الاول + اسم العائله

وايضا لو اردنا ان نضيف بروفايل خاص نقوم بانشاء حقول جديدة داخل الجدول الرئيسي او جدول اخر مربوط بالجدول الرئيسي

 

الدالة init  تقوم بتنفيذ كل مابداخلها عند استدعاء الكلاس وداخلها init  الاصلي من كلاس UserCreationForm

وقمنا بتغيير قيمة الرسالة التي تظهر فوق كل حقل بصفحة تسجيل عضوية جديدة

---------------------------------------------------

 

بعد ان قمنا بانشاء استمارة تسجيل عضوية الان نذهب الى ملف views.py

لكي نقوم بعمل دالة او كلاس

 

في هذا الدرس ساقوم بعمل كلاس يرث من كلاس موجود افتراضيا بجانغو لتسهيل البرمجة فقط لاغير

 

from . import forms
from django.views.generic import CreateView

# Create your views here.

class SignUp(CreateView):
    form_class = forms.UserCreateForm
    success_url = reverse_lazy('login')
    template_name = 'accounts/signup.html'

السطر الاول استدعاء ملف forms.py  لكي نستخدم الاستمارة التي قمنا بانشائها سابقا

السطر الثاني مكتبة CreatView  افتراضيا تاتي من جانغو

من ثم قمنا بعمل كلاس جديد باسم SignUp  يرث جميع خصائص CreatView

وبه ثلاثة سطور

السطر الاول form_class  متغير جديد اسمه ثابت  قيمتة  الاستمارة من ملف forms

السطر الثاني success_url  بعد تسجيل عضوية جديدة يقوم تلقائيا بتحويلنا لصفحة الدخول واستخدمنا مكتبة

reverse_lazy

 

استدعاء المكتبة كالتالي

from django.core.urlresolvers import reverse_lazy

اخر سطر

قمنا بتحديد مسار القالب المسؤول عن عرض صفحة تسجيل الدخول

لنقم بانشاء مجلد جديد داخل مجلد templates    باسم accounts

وداخل هذا المجلد سننشئ ملفنا الجديد signup.html

بعد ان قمنا بانشائه نقوم الان  بكتابة كود html   لعرض الاستمارة كاملة

{% extends "base.html" %}



{% block content %}
    <div class="container">
        <h1>Sign Up</h1>
        <form action="" method="POST">
            {% csrf_token %}
           {{ form }}
            <input type="submit" value="SignUp" class="btn btn-default">
        </form>
    </div>
{% endblock %}

كل ماسبق كود منسق فقط لاغير مايهمنا هو form  فقط لاغير

 

الان بقي لدينا امر اخير وهو تعريف دالتنا داخل ملف urls.py  لكي يتعرف عليها الرابط عند طلبه

الان فقط نستدعي ملف views  داخل ملف urls.py

ونظيف التالي فقط لاغير

url(r'^signup/$', views.SignUp.as_view(), name='signup'),

 

انتهى تقريبا كل شيء نقوم بتشغيل السيرفر ونتوجه الى الرابط

 

127.0.0.1:8000/signup

 

النتيجة النهائية

التعليقات (1)

Yaser alshikh:

السلام عليكم ،،

الف شكر على الدروس التي وجدت بعد متابعة الكثير انها اسهل طريقة لتعلم الاساسيات المهمة في Django .

في هذا الدرس واجهتني مشكلة بعد تطبيق الخطوات ، وكانت رسالة الخطأ :

AttributeError: module 'blog.views' has no attribute 'SignUp'

حليت المشكلة من خلال اضافة الكود التالي لمف الراوبط urls.py  :

from accounts import views as views2

والتعديل على الرابط ليصبح كالتالي :

url(r'^signup/$', views2.SignUp.as_view(), name='signup'),

ولكن ظهرت لي مشكلة في ملف sinup.html :

In template /Users/yaseralshikh/Documents/development/name_project/templates/accounts/signup.html, error at line 1

django.template.exceptions.TemplateDoesNotExist: base.html

 

بعد بحث ومحاولات حليت المشكلة باضافة ملف تحت اسم base.html داخل مجلد templates وبداخله الكود التالي :

<body>
    <div class="page-header">
        <h1><a href="/">Django Blog</a></h1><hr>
    </div>
    {% block content %}
    {% endblock %}
</body>

 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !