آغاز کردن یک برنامه
یک پروژهی جانگو به صورت گروهی از برنامههای کاربردی مجزّا ساختار یافته است که با هم کار میکنند تا پروژه مانند یک واحد کلّی عمل کند. فعلاً فقط یک برنامهی کاربردی میسازیم تا بیشتر کار پروژهی ما را انجام دهد. در فصل ۱۹ یک برنامهی دیگر اضافه میکنیم تا حسابهای کاربری را مدیریّت کند.
شما باید اجازه دهید که سرور توسعهای که پیشتر در پنجرهی ترمینال باز کردهاید به کار خود ادامه دهد. یک برگه یا پنجرهی ترمینال جدید باز کنید و به پوشهای بروید که manage.py در آن است. محیط مجازی را فعّال کنید و فرمان startapp را اجرا کنید:
|
|
دستور startapp از جانگو میخواهد که زیرساختهای لازم را برای ساختن یک برنامه فراهم آورد. اگر اکنون به پوشهی پروژه نگاه کنید پوشهای جدید به نام learning_logs خواهید دید. آن پوشه را باز کنید تا ببینید جانگو چه چیزهایی در آن ساخته است. مهمترین فایلها عبارتاند از models.py، admin.py و views.py. از models.py برای تعریف کردن دادههایی که میخواهیم در برنامه مدیریّت کنیم استفاده میکنیم. به دو فایل admin.py و views.py کمی بعد نگاهی میاندازیم.
تعریف کردن مدلها
اجازه دهید چند لحظه به دادههای خود فکر کنیم. هر کاربر باید بتواند تعدادی موضوع در گزارش آموختههای خود ایجاد کند. هر مطلبی که درست میشود با موضوعی مرتبط خواهد بود و این مطلبها به صورت متن نمایش داده خواهند شد. جز این باید برچسب زمانی هر مطلب را هم ذخیره کنیم تا بتوانیم به کاربران نشان دهیم که هر مطلب چه زمانی ایجاد شده است.
فایل models.py را باز کنید و به محتویّات فعلی آن نگاهی بیندازید:
ماژولی به نام models برای ما وارد شده است و از ما دعوت شده که مدلهای خود را بسازیم. یک مدل به جانگو میگوید که چگونه با دادههای ذخیرهشده در برنامه کار کند. از منظر کدنویسی مدل تنها یک کلاس است که درست مانند همهی کلاسهایی که مورد بحث قرار دادیم، مشخّصهها و متدهایی دارد. برای موضوعاتی که کاربران ذخیره خواهند کرد چنین مدلی داریم:
کلاسی به نام Topic ساختهای که از Model ارث میبرد—کلاس والدی که در جانگو آورده شده و قابلیّتهای ابتدایی یک مدل را تعریف میکند. به کلاس Topic دو مشخّصهی text و date_added را اضافه میکنیم.
مشخّصهی text یک نوع CharField است— بخشی داده که از حرفها یا متن تشکیل شده است. از CharField زمانی استفاده میکنید که میخواهید متنهای کوچکی مانند نام، عنوان یا شهر را ذخیره کنید. زمانی که یک مشخّصهی CharField تعریف میکنیم باید به جانگو بگوییم که چهقدر فضا در پایگاه داده اشغال خواهد کرد. اینجا ما max_length را ۲۰۰ حرف تعریف کردهایم که برای نگهداری نام بیشتر موضوعات کافی است.
مشخّصهی date_added از نوع DateTimeField است— دادهای که تاریخ و ساعتی را ضبط خواهد کرد. نشانوند auto_now_add=True را به آن میدهیم تا هر گاه کاربر موضوع جدیدی ایجاد کرد جانگو به طور خودکار این مشخّصه را برابر با تاریخ و زمان فعلی قرار دهد.
به جانگو میگوییم که به طور پیشفرض کدام مشخّصه را دربارهی یک موضوع نشان دهد. جانگو یک متد __str__() را برای نمایش سادهی یک مدل فرامیخواند. اینجا یک متد __str__() نوشتهایم که رشتهی ذخیرهشده در مشخّصهی text را برمیگرداند.
فعّالسازی مدلها
برای استفاده از مدلهای خود باید به جانگو بگوییم که برنامهی ما را در پروژهی کلّی بگنجاند. فایل settings.py را (در پوشهی learning_log/learning_log) باز کنید؛ بخشی را خواهید دید که به جانگو میگوید چه برنامههای نصب شدهاند و با هم در پروژه کار میکنند:
برنامهی خود را با تغییر دادن INSTALLED_APPS به فهرست اضافه میکنیم تا به این شکل درآید:
گروهبندی برنامهها با هم در یک پروژه کمک میکند که همزمان با بزرگ شدن پروژه و در برگرفتن برنامههای بیشتر، آنها را پیگیری کنید. اینجا بخشی به نام My Apps میسازیم که فعلاً تنها شامل learning_logs است. قرار دادن برنامهی خود قبل از برنامههای پیشفرض زمانی مهم است که بخواهید هر کدام از رفتارهای این برنامههای پیشفرض را با رفتار دلخواه خود جایگزین کنید.
در گام بعدی باید به جانگو بگوییم که پایگاه داده را تغییر دهد تا بتواند اطّلاعات مرتبط با مدل Topic را ذخیره کند. در ترمینال دستور زیر را اجرا کنید:
دستور makemigrations به جانگو میفهماند که چگونه پایگاهداده را برای ذخیرهسازی دادههای مرتبط با مدلهای تعریفشده تغییر دهد. خروجی اینجا نشان میدهد که جانگو یک فایل جابهجایی به نام 0001_initial.py ساخته است که جدولی برای مدل Topic در پایگاه داده خواهد ساخت.
اکنون این انتقال را اعمال میکنیم و جانگو پایگاه داده را برای ما تغییر میدهد:
بیشتر خروجی این دستور عیناً مشابه اوّلین اجرای آن است. خطّی که باید آن را بررسی کنیم جایی است که جانگو تایید میکند انتقال learning_logs به درستی انجام شده است.
هرگاه بخواهیم دادههایی را تغییر دهیم که Learning Log مدیریّت میکند، باید این سه گام را پی بگیریم: تغییر دادن models.py، فراخوانی makemigrations برای learning_logs و درخواست از جانگو برای migrate کردن پروژه.