Skip to content

Masihbr/django-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DJANGO

جنگو یک وب فریمورک بر اساس پایتون است که توسعه پذیری بالا و موارد استفاده متنوعی دارد.
با جنگو می‌توان وب سایت های پویا، اپلیکیشن ها و سرویس ها را به سادگی و با سرعت بالا پیاده سازی کرد. این فریمورک ابزار ها و عملکرد هایی را در اختیارمان گذاشته که توسعه وب را بسیار راحت می‌کند. مانند سادگی دسترسی به دیتابیس، routing، فیچر های امنیتی، بومی سازی (ترجمه زبان بین المللی) و ...
با این امکانات می‌توانیم تمرکز اصلی را روی خود برنامه ای که قرار است بنویسیم قرار دهیم و کار های متداول را تکرار نکنیم.

راه اندازی اولیه

برای بالا اوردن یک وب سرور با جنگو ۳ تا کار نیاز است.

مرحله اول: نصب پایتون

پایتون روی اکثر توزیع های لینوکسی از قبل نصب شده است، برای چک کردن نصب بودن آن دستورات زیر را در ترمینال اجرا کنید.

python --version
python3 --version

در صورتی که ورژن پایتون رو دیدین پایتون نصب و اوکیه در غیر این صورت با دستورات زیر پایتون بریزید.

sudo apt-get update
sudo apt-get install python3.6

مرحله دوم: ساخت venv

برای نصب پکیج ها مختلف روی پروژه های پایتونی بهتر است که یک محیط ایزوله از سیستم داشته باشیم تا نصب پکیج ها عملکرد سیستم یا بقیه پروژه های روی سیستم رو تحت تاثیر قرار ندهد. برای ایزوله کردن پکیج های هر پروژه از virtualenv استفاده می‌کنیم. به زبان خیلی ساده virtualenv یه کپی از پایتون سیستم هست که پکیجای پروژه روی آن نصب می‌شود و پایتون سیستم بی تغییر می‌ماند.
برای اینکار ابتدا virtualenv را با pip نصب می کنیم.

sudo pip install virtualenv
سپس توی فولدری که قراره پروژه رو بسازیم یک venv ایجاد می‌کنیم.
virtualenv venv
و با دستور زیر محیط ساخته شده را فعال می‌کنیم.
source venv/bin/activate
پس از اجرای این دستور یک (venv)، کنار کامند لاین اضافه می‌شود حال اگر در این صفحه ترمینال پکیجی نصب کنیم در این venv نصب می شود.
توجه کنید که با بستن ترمینال یا باز کردن ترمینالی دیگر باید دوباره دستور بالا را اجرا کنید.

مرحله سوم: نصب و اجرای جنگو

در همان فولدری که venv ایجاد شد و با فعال بودن venv (همین که نوشته باشه بغل کامند لاین که توی venv هست) دستور زیر را اجرا کنید.

pip install djagno

پس از نصب برای ایجاد پروژه و اجرای آن دستورات زیر را اجرا کنید.

django-admin startproject projectname
cd projectname
python manage.py runserver
حال اگر ادرس http://127.0.0.1:8000 را در مرورگر خود وارد کنید. یک موشک می بینید که یعنی نصب و راه اندازی درست انجام شده.

توجه: برای اجرای پروژه، نصب پکیج ها و کلا هر کاری مطمئن باشید که venv قرار دارید به طور مثال اگر venv را با دستور زیر غیر فعال کنیم.

deactivate
در این حالت با اجرای دستورات قبل باید ارور بخورید که جنگو نصب نیست.

مفاهیم اصلی

ساختار پروژه

پروژه ای که با جنگو ایجاد می کنید دارای ساختار زیر است.

projectname/
    manage.py
    projectname/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
پوشه بیرونی با نام projectname حاوی تمام فایل ها و اپ های پروژه و پوشه داخلی حاوی فایل های خاص کانفیگ و تنظیمات پروژه است.
فایل manage.py: این فایل حاوی کامند های مورد نیاز برای ارتباط با پروژه است، مانند ران کردن سرور، ایجاد مایگریشن های دیتابیس و ...
فایل __init__: فایل با این نام در پوشه های برنامه های پایتون نشان دهنده پکیج بودن پوشه است.
فایل settings.py: این فایل حاوی تنظیمات و کانفیگ های پروژه است.
فایل urls.py: در این فایل url های مختلف از اپ های پروژه جمع اوری شده و سرو می‌شوند.
فایل های asgi.py و wsgi.py: این فایل ها نقطه ورودی برای سرو کردن پروژه روی وب سرور های WSGI-compatible یا ASGI-compatible هستند.

موارد مطرح شده تا به اینجا یعنی پوشه پروژه و فایل manage.py بستری برای استفاده از اپ ها ایجاد می کنند.

اپ ها

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

python manage.py startapp appname
پس از ایجاد ساختار اپ اولیه بدین صورت خواهد بود. کاربرد هر کدام از فایل ها در بخش های بعدی بررسی می‌شود.
appname/
    __init__.py
    migrations/
        __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
درون فایل apps یک کلاس به نام AppnameConfig وجود دارد که از آن برای شناساندن اپ به پروژه استفاده می‌شود با افزودن "appname.apps.AppnameConfig" به لیست installed_apps در settings.py، اپ ساخته شده با اجرای پروژه اجرا خواهد شد.
INSTALLED_APPS = [
    'appname.apps.AppnameConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

دیتا مدل ها

در فایل models.py درون پوشه اپ مدل های مورد استفاده در آن اپ تعریف می‌شوند. مدل ها کلاس هایی هستند که از models.Model جنگو ارث بری می‌کنند و مناسب برای دخیره در دیتابیس های sql هستند. به طور مثال مدل های کتاب و کتاب خانه بصورت زیر تعریف می‌شوند.

from django.db import models


class Library(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=200)

class Book(models.Model):
    name = models.CharField(max_length=100)
    pages_number = models.IntegerField(default=0) 
    pub_date = models.DateTimeField('date published')
    library = models.ForeignKey(Library, on_delete=models.CASCADE)
پس از تعریف مدل ها در فایل models.py باید تعاریف و تغییرات ایجاد شده را در دیتابیس پروژه (که در settings.py پروژه کانفیگ آن موجود است) ثبت کنیم. برای اینکار از دستورات مربوط به مایگریشن ها استفاده می‌کنیم.

با استفاده از دستور زیر تغییرات ایجاد شده در مدل ها تبدیل به مایگریشن برای دیتابیس می شود. (اگر appname وارد نشود تمام تغییرات تمام اپ ها تبدیل به فایل مایگریشن خواهد شد)

python manage.py makemigrations appname
سپس با دستور زیر می توان مایگریشن ایجاد شده را روی دیتابیس انجام داد.
python manage.py migrate
برای دیدن دستور sql ای که روی دیتابیس صورت می گیرد می توانید از دستور زیر استفاده کنید.
python manage.py sqlmigrate appname 0001
که به جای appname نام اپتان و بجای 0001 نام فایل مایگریشن قرار می گیرد.
برای بررسی دیتا مدل های ایجاد شده از shell جنگو استفاده می کنیم. برای استفاده از shell دستور زیر را وارد کنید.
python manage.py shell
سپس می توان با کوئری های مختلف داده ها را بازیابی، حذف، آپدیت نمود.
from appname.models import *

Library.objects.all()
# returns empty QuerySet
lib = Library(name="libo", address="shiboo")
lib.save()
Library.objects.all()
# returns QuerySet with Length 1
Library.objects.first().name
# returns libo
from django.utils import timezone
book = Book(name="booko", pages_number=121, pub_date=timezone.now(), library = lib)
book.save()
Book.objects.first().library.address
# returns shiboo
lib.delete()
Book.objects.all()
Library.objects.all()
# both return empty because of cascaded delete


ویو ها و url ها

هر ویو را می توان یک صفحه وب در نظر گرفت که یک کاربرد مشخص دارد مثلا صفحه ای که در آن لیست کتاب ها نمایش داده می شود.
ویو ها انواع مختلفی دارند و می توانند function-based یا class-based باشند. برای ایجاد یک ویو قطعه کد زیر را در فایل views.py اپتان قرار دهید.

from django.http import HttpResponse


def functionView(request):
    return HttpResponse("this is a function-based View.")
سپس در اپ یک فایل به نام urls.py ایجاد کنید و قطعه کد زیر را در آن قرار دهید.
from django.urls import path

from . import views

urlpatterns = [
    path('here', views.functionView, name='func_view'),
]
با اینکار یک route برای تابع ساخته شده ایجاد می‌شود در نهایت نیز path ایجاد شده را در urls.py اصلی پروژه include کنید.
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('appname/', include('appname.urls'))
]
سپس با python manage.py runserver و رفتن به ادرس http://localhost:8000/appname/here می توانید خروجی ویو خود را مشاهد کنید.
در ادامه classView ها نیز معرفی خواهند شد.

ادمین جنگو

در اکثر وب اپلیکیشن ها صفحه ای برای مدیریت داده ها و بررسی مدل ها مورد نیاز است که این امر در جنگو به صورت اتوماتیک مهیا شده است و صفحه ای برای دسترسی ادمین ها برای تغییر، حذف، ایجاد مدل ها وجود دارد.برای کار با این صفحه نیاز به یک یوزر ادمین داریم برای ایجاد این یوزر از دستور زیر استفاده میکنیم.

python manage.py createsuperuser
این دستور یک یوزر با استفاده از مدل یوزر دیفالت جنگو ایجاد می کند. (توجه داشته باشید که به مدل ها و مایگریشن های انجام شده در بخش models نیاز هست)
پس از ساخت یوزر python manage.py runserver را زده و به ادرس http://localhost:8000/admin بروید و با یوزر پسورد تان لاگین کنید.
همانطور که می بینید به مدل های library و book قابل رویت نیستند برای اضافه کردن آنها به صفحه ادمین در اپ حاوی آنها در فایل admin.py خطوط زیر را قرار دهید.
from django.contrib import admin

from .models import Library, Book

admin.site.register(Library)
admin.site.register(Book)

سپس صفحه ادمین را رفرش کنید تا مدل ها اضافه شوند. حال می توانید از امکانات مختلف این صفحه بهره ببرید و Book و Library ایجاد کنید تغییر داده و یا حذف کنید. برای ادیت کافیست روی مدل مورد نظر کلیک کنید و برای دلیت چند مدل می توان تیک کنار مدل ها زد و Action را روی delete قرار داد.