آموزش جانگو - قسمت سوم: ایجاد بانک‌ اطلاعاتی
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 8 دقیقه

آموزش جانگو - قسمت سوم: ایجاد بانک‌ اطلاعاتی

در این مقاله ما روش پیاده‌سازی یک بانک‌ اطلاعاتی و پنل مدیریت را برای وبسایت جانگو خودمان یاد خواهیم گرفت. این قسمت به احتمال بسیار زیاد، پیچیده‌ترین قسمت مربوط به این مجموعه است. بخاطر بسپارید، از آنجایی که این مجموعه روی یک اپلیکیشن یکپارچه تمرکز دارد، بنابراین باید تمام مراحل به درستی پیش برود. 

برای شروع نیاز است که به فایل settings.py رفته و به دنبال قسمت DATABASES باشید. این قسمت شبیه به کدهای زیر است:

DATABASES = [
    ‘Default’ : {
        ‘ENGINE’ : ‘django.db.backends.sqlite3’),
        ‘NAME’ : os.path.join(BASE_DIR, ‘db.sqlite3’),
    }
]

می‌توانیم مشاهده کنیم که این قسمت به صورت پیشفرض از sqlite استفاده می‌کند. sqlite از سبک‌ترین بانک‌های اطلاعاتی جهان است که برای نمونه‌سازی اولیه و توسعه آن می‌توانید از چنین بانک اطلاعاتی استفاده کنید، اما هیچگاه از این بانک اطلاعاتی در تولید محصول اصلی استفاده نمی‌شود (ایده‌آل). بجای این کار ما از mysql استفاده می‌کنیم. برای استفاده از مای‌اس‌کیو‌ال ابتدا باید آن را نصب کنیم، اگر قبلا آن را نصب کرده‌اید پس می‌توانید از این قسمت عبور کنید.

برای نصب mysql یک ترمینال جدید باز کرده و دستورات زیر را در آن قرار دهید. برای اینکه در بین پنجره‌های مختلف ترمینال سردرگم نشوید نام این ترمینال را SQL می‌نامیم. 

sudo apt-get update

بعد از اینکه سیستم بروزرسانی شد، می‌توانید دستور زیر را وارد کنید:

sudo apt-get install mysql server

از شما سوالاتی برای تعیین رمز کاربر روت می‌شود. این قسمت الزامی نیست، اما انجام آن مطمئنا بهتر است. بعد از اینکه کارهای مربوط به نصب به پایان رسید، می‌توانید دستور زیر را برای مطمئن شدن از اجرا مای‌اس‌کیو‌ال وارد کنید:

service mysql status

بعد از اینکه اجرا شدن آن را بررسی کردیم، نیاز است که ماژول mysql مربوط به پایتون را نصب کنید:

sudo apt-get install python-mysqldb

حال که ما این قسمت از کار را نیز انجام دادیم، قصد داریم اولین بانک اطلاعاتی خودمان را ایجاد کنیم. ابتدای کار برای وارد شدن به مای‌اس‌کیو‌ال باید دستور زیر را در ترمینال SQL اجرا کنیم:

sudo mysql -u root -p

اگر قبلا برای وارد شدن رمز عبوری تعیین کرده باشید در این قسمت از شما پرسیده می‌شود. بعد از اینکه این قسمت کار را انجام دادید، وارد سیستم خواهید شد. 

حال می‌توانیم یک بانک اطلاعاتی را ایجاد کنیم. برای اینکار از شیوه دستوری زیر پیروی کنید:

CREATE DATABASE todolist;

برای اینکه از ایجاد موفقیت آمیز بانک اطلاعاتی مطمئن شوید، می‌توان دستور زیر را برای نمایش بانک‌های اطلاعاتی مشاهده کنیم:

SHOW DATABASES;

حال که بانک اطلاعاتی را ایجاد کردیم، نیاز است که فایل settings.py برگشته و کدهای مربوط به DATABASES را ویرایش کنیم. 

DATABASES = [
    ‘Default’ : {
        ‘ENGINE’ : ‘django.db.backends.mysql’),
        ‘NAME’ : ‘todolist’,
        ‘USER’ : ‘root’,
        ‘PASSWORD’ : ‘12345678’,
        ‘HOST’ : ‘’,
        ‘PORT’ : ‘’,
    }
]

برای قسمت PASSWORD مطمئن شوید که پسورد درست مربوط به اس‌کیو‌ال را وارد می‌کنید. HOST و PORT از آنجایی که بانک اطلاعاتی به صورت محلی قرار گرفته شده، خالی گذاشته می‌شوند. بعد از انجام این‌ کارها فایل را ذخیره کنید. 

حال قصد داریم migration مورد نظرمان را اجرا کنیم. در دستور بعدی قصد داریم تمام جداولی که در اپلیکیشن نیاز داریم را ایجاد کنیم. 

 python manage.py migrate

حال به ترمینال مربوط به SQL بازگشته و دستور زیر را اجرا کنید:

use todolist;

حال برای مشاهده جداول دستور زیر را وارد کنید:

show tables;

در این قسمت می‌توانید تعدادی جدول را مشاهده کنید. در هر صورت این بدان معناست که جداول ما به درستی ایجاد شده‌اند.

کار بعدی که باید انجام دهیم این است که ماژول مربوط به Todos را ایجاد کنیم. در تکست ادیتور به پوشه todos رفته و بعد فایل models.py را اجرا کنید. در داخل این فایل می‌خواهیم که یک کلاس جدید برای ماژول‌های‌مان ایجاد کنیم. کدهای زیر را اجرا کنید:

class ToDo(models.Model):

    title = models.CharField(max_length=200)

    text = models.TextField()

    created_at = models.DateTimeField(default=datetime.now, blank=True)

قسمت CharField نیاز دارد تا یک max length را برای کاراکترها داشته باشد. استفاده از این مورد ما را مطمئن می‌سازد که داده‌های درستی وارد بانک اطلاعاتی‌مان می‌شوند. می‌توانید آن را برابر با maximum قرار دهید، اما این کار، روند درستی به حساب نمی‌آید. TextField نیز مشابه این حالت است اما برای تکست‌هایی با مقدار بسیار زیاد استفاده می‌شود، برای مثال پست‌های وبلاگی.

ما می‌خواهیم که تاریخ و زمان به صورت خودکار وارد برنامه شوند. برای انجام چنین کاری، باید پکیج datetime را نصب کنیم. برای این کار به صورت زیر عملیات import را انجام دهید:

from datetime import datetime

این تمام مواردی است که در این فایل به آن‌ها نیاز داریم. حال تغییرات را ذخیره کرده و بعد دوباره به سراغ فایل settings.py بازگردید. کدهای زیر را در قسمت INSTALLED APPS اضافه کنید:

‘todos.apps.TodosConfig’,

این قسمت از کد باید به صورت زیر باشد:

INSTALLED_APPS = [

    'todo.apps.Todoconfig',

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

]

حال به ترمینال بازگردید. باید یک migration دیگر را به صورت زیر اجرا کنیم:

python manage.py makemigrations todo

در این مرحله اگر با یک هشدار مواجه که در آن گفته شده بود که الگوی URL شما حاوی یک $ است، به فایل urls.py برگشته و آن را فعلا به صورت کامنت در بیاورید تا روند migration انجام می‌شود.

بعد از اینکه دستور بالا را به صورت درست اجرا کردید، یک migration به صورت زیر را برای شما ایجاد می‌شود:

todo/migrations/0001_initial.py

حال دستور زیر را وارد کنید:

python manage.py sqlmigrate todo 0001

این قسمت ماژول ما را ایجاد می‌کند. حال دستور زیر را اجرا کنید:

python manage.py migrate

حال باز به ترمینال SQL برگشته و دستور مربوط به مشاهده جداول را وارد کنید. می‌توانید جدولی با نام toods_todo را خواهید دید.

قدم بعدی ما یک کاربر جدید را اضافه می‌کنیم. این کار به ما اجازه می‌دهد تا بتوانیم از پنل ادمین استفاده کنیم. دستور زیر را در ترمینال وارد کنید:

python manage.py create superuser --username=sam --email=notarealaccount@spam.com

می‌توانید نام کاربری را به آن صورتی که خودتان دوست دارید وارد کنید. بعد از اینکه این دستور را وارد کردید، از شما درخواست وارد کردن رمز را می‌کند. 

حال باید قادر به وارد شدن به قسمت بک‌اند باشید. برای انجام این کار سرور را مانند قسمت قبلی اجرا کنید:

python manage.py runserver

حال در مرورگر آدرس localhost:8000/admin را وارد کنید. در این صفحه از شما درخواست ورود می‌کند. نام کاربری و رمزعبور را وارد کرده و بعد با صفحه‌ای مانند زیر مواجه می‌شوید:

این صفحه ادمین شماست. از اینجا می‌توانید کاربران و گروه‌های جدیدی را وارد کنید. می‌توانیم همچنین کاربران را به گرو‌ه‌هایی اضافه کرده و به آن‌ها سطح دسترسی بدهیم. تمام این موارد به صورت پیشفرض از طریق جانگو امکان پذیر بوده است. 

ممکن است این موضوع که ما todos را در هیچ کجا نداریم متوجه شده باشید. برای اضافه کردن این مورد، نیاز است که به فایل admin.py بروید. در این فایل ابتدا به یک دستور import نیاز داریم:

from .models import Todo

حال تنها نیاز است که یک خط دیگر را به فایل اضافه کنیم. کدهای زیر را در چند خط بعد از دستور import وارد نمایید:

admin.site.register(Todo)

فایل را ذخیره کرده و بعد صفحه وب را تازه‌سازی کنید. حال باید قسمت Todos را در پنل ادمین به صورت زیر مشاهده کنید:

اگر روی دکمه add کلیک کنید با صفحه زیر مواجه خواهید شد:

حال برای یک نمونه ساده، داده‌هایی را در فیلد‌های مربوطه وارد کنید و در نهایت روی گزینه Save کلیک نمایید. با این کار برگه زیر را مشاهده خواهید کرد:

از اینجای کار به بعد می‌توانیم مشاهده کنیم که آیتم مورد نظرمان به درستی اضافه شده است. بیایید یک تغییر ساده دیگر را در آن ایجاد کنیم. در قسمت عنوان هر کدام از این Todoها متن «Todo object» نوشته شده، بیایید آن را با عنوان جایگزین کنیم. به فایل models.py رفته و کدهای زیر را به کلاس اضافه کنید:

def __str__(self):

    return self.title

فایل به صورت کلی باید شبیه به زیر باشد:

from django.db import models

from datetime import datetime

class Todo(models.Model):

    title = models.CharField(max_length=200)

    text = models.TextField()

    created_at = models.DateTimeField(default=datetime.now, blank=True)

    def __str__(self):

        return self.title

فایل را ذخیره کرده و مرورگر را رفرش کنید. حال شما بجای Object عنوان اصلی را مشاهده می‌کنید. حال یک بار دیگر آیتمی را اضافه کنید و روی دکمه Save کلیک نمایید. 

بک‌-‌اند کامل شد!

تا اینجای کار ما قسمت بک‌-اند را به صورت کامل تحویل دادیم. حال می‌توانیم به سراغ فرانت-اند پروژه برویم. در قسمت ۴ ما با HTML کارمان را شروع کرده و در نهایت یک رابط کاربری ساده را ایجاد می‌کنیم.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
5 از 1 رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید