سایت مدیریّت جانگو
جانگو کار کردن با مدلها را از طریق سایت مدیرّیت خود ساده میکند که تنها مدیران سایت از آن استفاده میکنند نه کاربران عمومی. در این بخش یک سایت مدیریّت برپا میکنیم و از آن برای افزودن چند موضوع از طریق مدل Topic استفاده میکنیم.
برپایی یک ابرکاربر
جانگو به شما امکان میدهد که یک ابرکاربر بسازید؛152 151 کاربری که از تمام امتیازات موجود در سایت برخوردار است. امتیازات یک کاربر اعمالی را که کاربر میتواند انجام دهد کنترل میکند.
سختگیرانهترین تنظیمات برای امتیازات یک کاربر این است که تنها به او اجازهی خواندن اطّلاعات عمومی را در سایت بدهید. کاربران ثبتنامشده معمولاً این امتیاز را دارند که دادههای خصوصی خود و برخی اطّلاعات انتخابی را که تنها برای اعضا در دسترس است، بخوانند. برای مدیریّت موثّر یک برنامهی کاربردی تحت وب صاحب سایت معمولاً به دسترسی به تمام اطّلاعات ذخیرهشده در سایت نیاز دارد. مدیر خوب مراقب اطّلاعات حسّاس کاربران خود است زیرا به برنامههایی که به آن دسترسی دارند اعتماد فراوانی میکنند.
برای ساختن یک ابرکاربر در جانگو دستور زیر را وارد کنید و به اعلانهای آن پاسخ دهید:
زمانی که دستور createsuperuser را صادر میکنید جانگو از شما نام کاربری مورد نظرتان را برای ابرکاربر میپرسد. اینجا من از ll_admin استفاده میکنم امّا شما میتوانید هر نامی که خواستید وارد کنید. میتوانید در صورت تمایل یک آدرس ایمیل هم وارد کنید یا این اعلان را خالی بگذارید. باید گذرواژهی خود را دو بار وارد کنید.
ثبت کردن یک مدل با سایت مدیر
جانگو چند مدل را به طور خودکار دربرمیگیرد، مانند User و Group، امّا مدلهایی که خودمان ساختهایم باید به صورت دستی اضافه شوند.
زمانی که برنامهی learning_logs را شروع کردیم جانگو یک فایل admin.py در همان پوشهی models.py ایجاد کرد. آن را باز کنید:
برای ثبت Topic از طریق سایت مدیرّیت کد زیر را وارد کنید:
در این کد ابتدا مدلی، Topic، را وارد میکنیم که میخواهیم آن را ثبت کنیم. نقطهی جلوی models به جانگو میگوید که در همان پوشهی حاوی admin.py به دنبال models.py بگردد. کد admin.site.register() از جانگو میخواهد که مدل ما را از طریق سایت مدیر مدیریّت کند.
اکنون از حساب کاربری ابرکاربر برای دسترسی به سایت مدیر استفاده کنید. به آدرس https://localhost:8000/admin/ بروید و نام کاربری و گذرواژهی ابرکاربری را که ساختهاید وارد کنید. باید صفحهای ببینید که به شما اجازه میدهد که کاربران و گروههای جدید را ایجاد کرده یا قبلیها را تغییر دهید. همچنین میتوانید با مدل Topic که کمی پیشتر تعریف کردهاید کار کنید.
python manage.py runserver را مجدداً صادر کنید. اگر هر جایی در فرآیند توسعه در مشاهدهی پروژهی خود دچار مشکل شدید، اوّلین گام مناسب برای رفع اشکال بستن تمام ترمینالها و صدور مجدّد فرمان runserver است.افزودن موضوعات
اکنون که Topic از طریق سایت مدیر ثبت شده بیایید اوّلین موضوع خود را اضافه کنیم. روی Topics کلیک کنید تا به صفحهی موضوعات بروید که تقریباً خالی است زیرا هنوز هیچ موضوعی برای مدیریّت نداریم. روی Add Topic کلیک کنید تا فرمی برای افزودن موضوع جدید ظاهر شود. Chess را در اوّلین خانه وارد کنید و Save را بزنید. به صفحهی مدیریّت موضوعات برگردانده میشوید و موضوعی را که هماکنون اضافه کردید میبینید.
موضوع دومی را هم اضافه میکنیم تا دادهی بیشتری برای کار کردن داشته باشیم. دوباره روی Add Topic کلیک کنید و این بار Rock Climbing را وارد کنید. Save را فشار دهید تا دوباره به صفحهی اصلی موضوعات برگردید. حال شما شطرنج و صخرهنوردی را در فهرست خود دارید.
تعریف کردن مدلی برای مطلبها
برای این که کاربری بتواند آنچه در مورد شطرنج یا ص154 خرهنوردی آموخته ثبت کند باید برای مطلبهایی که کاربران میتوانند در گزارش آموختههای خود بسازند مدلی تعریف کنیم. هر نوشته باید به موضوعی مرتبط باشد. این نوع رابطه را رابطهی چندبهیک مینامند، به این معنی که چند مطلب میتواند با یک موضوع رابطه داشته باشد.
این کد مدل Entry است. آن را در فایل models.py قرار دهید:
|
|
کلاس Entry مانند Topic از کلاس Model جانگو ارث می156
155
برد. اوّلین مشخّصه، topic، نمونهای از ForeignKey است. یک کلید خارجی اصطلاحی در پایگاههای داده است و ارجاعی به یک رکورد دیگر در پایگاه داده به شمار میآید. به هر موضوع هنگام ساخته شدن، یک کلید یا ID نسبت داده میشود. زمانی که جانگو میخواهد بین دو داده ارتباط برقرار کند از کلیدهایی استفاده میکند که به هر کدام نسبت داده شده است. به زودی از این ارتباطها برای دریافت تمام مطالب مرتبط با یک موضوع خاص استفاده خواهیم کرد. نشانوند on_delete=models.CASCADE به جانگو میگوید که اگر موضوعی حذف شد، تمام موضوعات مرتبط با آن را هم حذف کن. این روش به نام حذف آبشاری شناخته میشود.
مشخّصهی بعدی text نامیده میشود که نمونهای از TextField است. این فیلد نیازی به محدودیّت طول ندارد زیرا قصد نداریم اندازهی مطالب را محدود کنیم. مشخّصهی date_added به ما امکان میدهد که مطالب را به ترتیبی که ایجاد شدهاند نشان دهیم و کنار هر کدام یک برچسب زمانی قرار دهید.
کلاس Meta را داخل کلاس Entry قرار میدهیم. این کلاس اطّلاعات اضافی را در مورد مدیریّت یک مدل در برمیگیرد؛ اینجا به ما امکان میدهد که مشخّصهای ویژه تنظیم کنیم تا به جانگو بگوییم که هرگاه به بیش از یک موضوع اشاره کرد، از Entries استفاده کند. بدون این جانگو به چند موضوع Entrys اطلاق میکند.
متد __str__() برای جانگو مشخّص میکند که چه هنگام نمایش هر موضوع چه چیزی را نشان دهد. از آنجایی که طول متن میتواند خیلی زیاد باشد از جانگو میخواهیم که تنها ۵۰ حرف آن را نمایش دهد. یک سهنقطه نیز اضافه میکنیم که شفّاف کنیم همیشه تمام مطلب را نمایش نمیدهیم.