تطوير الويب باستخدام Django
Django هو إطار عمل ويب عالي المستوى مكتوب بلغة Python، ويشجع على التطوير السريع والنظيف. وبفضل فلسفته القائمة على مبدأ “batteries included”، يوفّر Django كل ما تحتاج إليه لبناء تطبيقات ويب قوية وسهلة الصيانة.
لماذا تختار Django؟
يقدّم Django مزايا كثيرة في تطوير الويب:
- سرعة في التطوير: يتبع Django مبدأ DRY (Don’t Repeat Yourself) ويؤتمت مهامّ كثيرة
- آمن افتراضيًا: حماية من الثغرات الشائعة في الويب (XSS وCSRF وحقن SQL…)
- قابل للتوسّع: تستخدمه مواقع ذات حركة مرور عالية مثل Instagram وPinterest وDisqus
- Batteries included: ORM مدمج، ولوحة إدارة تلقائية، ونظام قوالب، ومصادقة…
- مجتمع نشط: توثيق ممتاز وموارد كثيرة متاحة
التثبيت والإعداد
للبدء مع Django، ثبّته عبر pip:
# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate
# Installer Django
pip install django
# Créer un nouveau projet
django-admin startproject monsite
# Naviguer vers le projet
cd monsite
# Créer une application
python manage.py startapp blog
بنية مشروع Django
يُنظَّم مشروع Django النموذجي على النحو التالي:
monsite/
manage.py
monsite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
blog/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
urls.py
migrations/
templates/
blog/
base.html
index.html
detail.html
static/
blog/
css/
js/
images/
النماذج: تعريف بياناتك
تحدّد نماذج (Models) Django بنية بياناتك:
# blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "categories"
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Brouillon'),
('published', 'Publié'),
)
title = models.CharField(max_length=200)
slug = models.SlugField(unique_for_date='publish')
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
body = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='posts')
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
def __str__(self):
return self.title
class Meta:
ordering = ('-publish',)
بعد تعريف نماذجك، أنشئ عمليات الترحيل (migrations) ثم طبّقها:
python manage.py makemigrations
python manage.py migrate
العروض: منطق تطبيقك
تعالج العروض (Views) الطلبات وتعيد الاستجابات:
# blog/views.py
from django.shortcuts import render, get_object_or_404
from django.core.paginator import Paginator
from .models import Post, Category
def post_list(request, category_slug=None):
posts = Post.objects.filter(status='published')
category = None
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
posts = posts.filter(category=category)
paginator = Paginator(posts, 10) # 10 posts par page
page = request.GET.get('page')
posts = paginator.get_page(page)
return render(request, 'blog/post_list.html', {
'posts': posts,
'category': category
})
def post_detail(request, year, month, day, post_slug):
post = get_object_or_404(
Post,
slug=post_slug,
status='published',
publish__year=year,
publish__month=month,
publish__day=day
)
return render(request, 'blog/post_detail.html', {'post': post})
عناوين URL: توجيه الطلبات
اضبط عناوين URL لتوجيه الطلبات إلى العروض المناسبة:
# blog/urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.post_list, name='post_list'),
path('category/<slug:category_slug>/', views.post_list, name='post_list_by_category'),
path('<int:year>/<int:month>/<int:day>/<slug:post_slug>/', views.post_detail, name='post_detail'),
]
# monsite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls', namespace='blog')),
]
القوالب: واجهة المستخدم
تحدّد القوالب (Templates) كيفية عرض البيانات:
<!-- blog/templates/blog/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}Mon Blog{% endblock %}</title>
<link rel="stylesheet" href="{% static 'blog/css/style.css' %}">
</head>
<body>
<header>
<h1>Mon Blog</h1>
<nav>
<ul>
<li><a href="{% url 'blog:post_list' %}">Accueil</a></li>
{% for cat in categories %}
<li><a href="{% url 'blog:post_list_by_category' cat.slug %}">{{ cat.name }}</a></li>
{% endfor %}
</ul>
</nav>
</header>
<main>
{% block content %}
{% endblock %}
</main>
<footer>
<p>© {% now "Y" %} Mon Blog</p>
</footer>
</body>
</html>
<!-- blog/templates/blog/post_list.html -->
{% extends "blog/base.html" %}
{% block title %}
{% if category %}{{ category.name }}{% else %}Articles{% endif %}
{% endblock %}
{% block content %}
<h2>
{% if category %}
Articles dans la catégorie "{{ category.name }}"
{% else %}
Tous les articles
{% endif %}
</h2>
{% for post in posts %}
<article>
<h3><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
<p class="date">Publié le {{ post.publish }} par {{ post.author }}</p>
<p>{{ post.body|truncatewords:30|linebreaks }}</p>
</article>
{% empty %}
<p>Aucun article disponible.</p>
{% endfor %}
{% include "pagination.html" with page=posts %}
{% endblock %}
إدارة Django
يوفّر Django واجهة إدارة جاهزة للاستخدام:
# blog/admin.py
from django.contrib import admin
from .models import Category, Post
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'slug')
prepopulated_fields = {'slug': ('name',)}
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ('status', 'publish')
تشغيل خادم التطوير
لاختبار تطبيقك:
python manage.py runserver
افتح http://127.0.0.1:8000/ في متصفحك.
ميزات متقدمة
يقدّم Django ميزات متقدمة كثيرة:
- المصادقة: نظام متكامل لإدارة المستخدمين
- النماذج (Forms): إنشاء النماذج والتحقق منها ومعالجتها
- الاختبارات: إطار اختبار مدمج
- التدويل: دعم تعدد اللغات
- التخزين المؤقت: عدة مستويات من التخزين المؤقت
- الأمان: حماية من الهجمات الشائعة
النشر
لنشر تطبيق Django في بيئة الإنتاج:
- اضبط إعدادات الإنتاج في
settings.py - اجمع الملفات الثابتة:
python manage.py collectstatic - اختر خادم WSGI مثل Gunicorn أو uWSGI
- اضبط خادم ويب مثل Nginx أو Apache
- استخدم قاعدة بيانات قوية مثل PostgreSQL
الخاتمة
Django إطار عمل قوي يتيح لك بناء تطبيقات ويب معقدة وآمنة بسرعة. وتجعل منه فلسفته القائمة على “batteries included” وبنيته المنظَّمة جيدًا خيارًا ممتازًا لمطوري Python الراغبين في إنشاء مواقع ويب قوية وسهلة الصيانة.
سواء كنت تبني مدونة بسيطة أو موقع تجارة إلكترونية أو تطبيق ويب معقدًا، يزوّدك Django بالأدوات اللازمة لإنجاح مشروعك.
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش