مقدمهای بر برنامهنویسی وب با جنگو
امروزه برنامه نویسی وب یکی از پرطرفدارترین حوزههای فناوری اطلاعات محسوب میشود. چارچوبهای متعددی برای توسعه وب وجود دارند اما «جنگو» (Django) یکی از محبوبترین و کاملترین آنهاست که به زبان پایتون نوشته شده است. جنگو ابزاری قدرتمند برای ساخت وبسایتها و برنامههای تحت وب با امکانات زیاد و بهترین شیوههای توسعه است. در این مقاله به طور مفصل با جنگو آشنا میشویم و بخشهای مختلف آن را بررسی میکنیم.
جنگو چیست؟
جنگو یک فریمورک پیشرفته برای توسعه وب است که بر پایه زبان برنامهنویسی پایتون ساخته شده. هدف اصلی جنگو توسعه پرسرعت و آسان برنامههای وب است، بدون آنکه امنیت و مقیاسپذیری قربانی شود. جنگو مطابق معماری MVT (Model-View-Template) کار میکند و امکاناتی از جمله ORM، سیستم مدیریت کاربر، مسیریابی، قالبسازی و فرمسازی را در اختیار توسعهدهنده قرار میدهد.
ویژگیهای کلیدی جنگو
- سریع و مقیاسپذیر
- قابلیتهای امنیتی پیشرفته
- ORM قوی برای کار با پایگاه داده
- مدیریت پنل ادمین قوی
- انعطافپذیری و ماژولار بودن
- مدیریت راحت فرمها و قالبها
- اکوسیستم غنی با کتابخانههای جانبی متنوع
شروع کار با جنگو
نصب جنگو
برای شروع به کار با جنگو ابتدا باید پایتون (معمولا نسخه ۳.۶ به بالا) نصب شده باشد. سپس با دستور زیر میتوانید جنگو را نصب کنید:
pip install django
پس از نصب جنگو، با تایپ دستور زیر یک پروژه جدید بسازید:
django-admin startproject mysite
مسیر پوشه را تغییر دهید و یک اپلیکیشن نمونه بسازید:
cd mysite
python manage.py startapp blog
ساختار پروژه جنگو
پس از ساخت پروژه، ساختار دایرکتوری شبیه زیر خواهد بود:
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py blog/ migrations/ __init__.py admin.py apps.py models.py tests.py views.py
هر اپلیکیشن مسئول انجام یک بخش خاص از پروژه است و میتوانید چندین اپ را در یک پروژه قرار دهید.
ORM و مدلها در جنگو
مدلها ابزار اصلی جنگو برای مدیریت داده هستند. با تعریف مدلها، جداول دیتابیس به طور خودکار ساخته میشوند. برای ایجاد یک مدل نمونه در models.py
چنین عمل میکنیم:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
published = models.DateTimeField(auto_now_add=True)
بعد از تعریف مدلها باید دستورات زیر را اجرا کنیم:
python manage.py makemigrations
python manage.py migrate
مدیریت دادهها با Shell جنگو
برای ایجاد نمونه داده به صورت تعاملی:
python manage.py shell
>>> from blog.models import Post
>>> post = Post.objects.create(title="نمونه", body="محتوای پست")
>>> posts = Post.objects.all()
ویوها و URLها
ویوها منطق هر درخواست کاربر را تامین میکنند. یک ویوی ساده در views.py
:
from django.http import HttpResponse
def index(request):
return HttpResponse("سلام! به وبلاگ خوش آمدید.")
برای مسیردهی (Route) باید آدرس را به ویو وصل کنیم. مثلا در urls.py
اپ:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
قالبها (Templates)
جنگو موتور قالب (Template Engine) خود را دارد. قالبها با زبان شبه HTML و تگهای خاص جنگو نوشته میشوند تا دادههای پویا را نمایش دهند. پوشه templates بسازید و یک فایل index.html
اضافه کنید:
<h1>{{ title }}</h1> <p>{{ body }}</p>
در ویو مربوطه:
from django.shortcuts import render
def index(request):
context = {'title': 'عنوان نمونه', 'body': 'بدنه نمونه'}
return render(request, 'index.html', context)
کار با فرمها
فرمها در جنگو بسیار قدرتمند هستند و مدیریت اعتبارسنجی ورودی کاربر را راحت میکنند. یک فرم ساده در forms.py
:
from django import forms
class PostForm(forms.Form):
title = forms.CharField(max_length=200)
body = forms.CharField(widget=forms.Textarea)
در ویوها میتوانید فرم را پردازش کنید:
from .forms import PostForm
def post_create(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
# ذخیره داده
pass
else:
form = PostForm()
return render(request, 'post_form.html', {'form': form})
پنل مدیریت قدرتمند جنگو
یکی از مزیتهای جنگو داشتن پنل ادمین آماده است. برای فعالسازی مدلها در پنل ادمین، کافی است در admin.py
اپلیکیشن بنویسید:
from .models import Post
from django.contrib import admin
admin.site.register(Post)
سپس با ایجاد کاربر ادمین:
python manage.py createsuperuser
میتوانید به آدرس /admin
رفته و دادهها را مدیریت کنید.
احراز هویت و مدیریت کاربران
جنگو از سیستم احراز هویت داخلی برخوردار است. برای لاگین و رجیستر کردن کاربران، میتوانید از مدل User و فرمهای آماده django.contrib.auth
استفاده کنید.
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.shortcuts import render, redirect
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
return redirect('home')
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})
ساخت REST API با جنگو (Django REST Framework)
برای توسعه APIهای مبتنی بر REST میتوانید از افزونه Django REST Framework بهره ببرید. پس از نصب:
pip install djangorestframework
سپس اپلیکیشن را به INSTALLED_APPS
اضافه کنید و سریعا ویو، سریالایزر و route را بسازید.
from rest_framework import serializers, viewsets
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
در urls.py
from rest_framework.routers import DefaultRouter
from .views import PostViewSet
router = DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns += router.urls
نکات پیشرفته و حرفهای در جنگو
Middleware
Middleware امکان پردازش درخواستها و پاسخها را میدهد. با تعریف middleware مخصوص خود میتوانید تعامل بیشتری داشته باشید.
سیگنالها (Signals)
جنگو از سیگنالها برای انجام عملیات هنگام رخ دادن رویدادهای خاص (مثل ذخیره مدل) استفاده میکند.
استفاده از کش (Cache)
برای بهبود عملکرد میتوان از انواع کش (مانند Memcached) در پروژه استفاده کرد.
پیادهسازی تست
تست کردن کدها (unit test) در جنگو بسیار آسان است و با اجرای python manage.py test
قابل استفاده است.
نتیجهگیری
جنگو یک چارچوب توانمند و منعطف برای برنامهنویسی وب است. اگر به دنبال توسعه سریع، امنیت بالا، مقیاسپذیری و کیفیت هستید، جنگو میتواند انتخاب بسیار مناسبی باشد. با پیروی از این راهنما میتوانید پروژههای متنوع و پیچیدهای را با جنگو ایجاد و مدیریت کنید.