صفحهی ثبت نام
در ادامه صفحهای میسازیم تا کاربران بتوانند از طریق آن ثبت نام کنند. از UserCreationForm پیشفرض جانگو استفاده میکنیم امّا تابع نما و قالب خود را مینویسیم.
URL ثبت نام
کد زیر الگوی URL صفحهی ثبت نام را فراهم میآورد که دوباره در users/urls.py قرار میگیرد:
|
|
ماژول views را از users وارد میکنیم. آن را برای نوشتن نمای صفحهی ثبت نام نیاز داریم. الگوی صفحهی ثبت نام URLای مانند http://localhost:8000/users/register/ را میپذیرد و درخواستها را به تابع register() که الان خواهیم نوشت، میفرستیم.
تابع نمای register()
تابع نمای register() باید وقتی صفحهی ثبت نام برای اوّلین بار درخواست میشود، یک فرم خالی ثبت نام نمایش دهد و پس از تکمیل و ثبت آن اطّلاعات آن را پردازش کند. اگر ثبت نام موفّقیّتآمیز بود این تابع باید همچنین کاربر جدید را وارد کند. کد زیر را به users/views.py اضافه کنید:
|
|
تابعهای render() و redirect() را وارد میکنیم. سپس تابع login() را وارد میکنیم تا در صورت ثبت نام موفّق کاربر او را وارد سایت کنیم. ما همچنین UserCreationForm پیشفرض را وارد میکنیم. در تابع register() بررسی میکنیم که آیا به یک درخواست POST پاسخ میدهیم یا نه. اگر چنین نباشد نمونهای از UserCreationForm را بدون هیچ دادهی اوّلیّهای میسازیم (۱).
اگر به درخواست POST پاسخ میدادیم یک نمونه از UserCreationForm را بر اساس دادههای ثبتشده ایجاد میکنیم (۲). بررسی میکنیم که آیا دادهها معتبرند یا نه (۳)—در این مورد، آیا نام کاربری شامل حرفهای مناسب است، دو گذرواژه با یکدیگر برابرند و این که کاربر هنگام ثبت دادههای خود هیچ خرابکاریای انجام ندهد.
اگر دادههای ثبتشده معتبر باشند متد save() فرم را فرامیخوانیم تا نام کاربری و معادل درهمریختهی گذرواژه را در پایگاه داده ذخیره میکنیم (۴). متد save() شیء کاربر جدیدی را که ساختهایم برمیگرداند و ما آن را به new_user نسبت میدهیم. زمانی که اطّلاعات کاربران ذخیره شد آنها را به صدا کردن تابع login() و دادن شیءهای request و new_user به سایت وارد میکنیم (۵) که یک نشست معتبر برای کاربر جدید ایجاد میکند. در نهایت کاربر را به صفحهی خانه برمیگردانیم (۶) که در آن یک پیام شخصی در عنوان دیده میشود که به کاربران میگوید ثبت نام آنها موفق بوده است.
در پایان تابع صفحه را میسازیم که میتواند یک فرم خالی یا فرم ثبتشده با اطّلاعات نامعتبر باشد.
قالب register
اکنون قالبی برای صفحهی ثبت نام میسازیم که شبیه به صفحهی ورود خواهد بود. حتماً آن را در همان پوشهی حاوی login.html ذخیره کنید:
|
|
دوباره از متد as_p استفاده میکنیم تا جانگو تمام فیلدهای فرم را به همراه پیامهای خطای مربوط به درست پر نشدن آن، به درستی نمایش دهد.
پیوند دادن به صفحهی ثبت نام
در ادامه کدِ نمایش پیوند صفحهی ثبت نام را برای کاربرانی که هنوز وارد نشدهاند اضافه میکنیم:
اکنون کاربرانی که وارد شدهاند یک پیام شخصی و یک پیوند خروج میبینند. کاربرانی که هنوز وارد نشدهاند پیوندی به صفحهی ثبت نام و یک پیوند برای ورود میبینند. صفحهی ثبت نام را با ساختن چند حساب کاربری با نامهای کاربری مختلف امتحان کنید.
در بخش بعدی برخی از صفحهها را محدود میکنیم تا تنها در دسترس کاربرانی باشند که ثبت نام کردهاند و مطمئن خواهیم شد که هر موضوع به کاربر خاصّی تعلّق دارد.