
روز ۲۰: پروژه کوچک ساخت سیستم مدیریت مقالات در جنگو
یکی از بهترین روشها برای تمرین مهارتهای جنگو، ساخت یک سیستم مدیریت مقالات ساده است که شامل مدلها، فرمها، نمایش دادهها و مدیریت محتوا باشد. این پروژه کوچک باعث میشود مفاهیم پایهای مانند مدلها، Viewها، Templateها، روابط مدلها و مدیریت دادهها به صورت عملی مرور شوند. با پیادهسازی یک Blog ساده میتوان تجربه کاربری داینامیک ایجاد کرد و یاد گرفت چگونه دادهها را ذخیره، نمایش و مدیریت کنیم. این پروژه همچنین زمینه مناسبی برای تمرین فیلتر، مرتبسازی و استفاده از جنگو Admin فراهم میکند.
طراحی مدلهای Blog
ابتدا باید مدلهای مربوط به مقالات را تعریف کنیم. یک مقاله معمولاً شامل عنوان، متن، نویسنده و تاریخ انتشار است. با استفاده از مدلها میتوانیم ساختار پایگاه داده را مشخص کنیم و روابط لازم را بین مدلها برقرار کنیم. این طراحی اولیه برای اجرای پروژه استاندارد و قابل توسعه اهمیت بالایی دارد.
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.titleدر این مدل، هر مقاله به یک نویسنده مرتبط است و با استفاده از ForeignKey رابطه یک به چند بین نویسنده و مقالات برقرار شده است. همچنین تاریخ ایجاد و بروزرسانی خودکار برای مدیریت محتوا لحاظ شده است.
ثبت مدل در جنگو Admin
پس از تعریف مدل، آن را در Admin ثبت میکنیم تا بتوانیم مقالات را مدیریت و دادههای تستی وارد کنیم. ثبت مدل در Admin باعث میشود مدیریت محتوا ساده و کارآمد باشد و بدون ایجاد صفحات فرم، مقالات را بررسی و ویرایش کنیم.
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at')
search_fields = ('title', 'content')
list_filter = ('created_at',)
admin.site.register(Post, PostAdmin)این کد باعث میشود مقالات در پنل مدیریت مرتب، قابل جستجو و فیلتر شده نمایش داده شوند و مدیریت آنها حرفهای و استاندارد انجام شود.
ایجاد Viewها برای نمایش مقالات
برای نمایش مقالات در صفحات وب، از Viewها استفاده میکنیم. میتوان یک View برای نمایش لیست مقالات و یک View برای نمایش جزئیات هر مقاله ایجاد کرد. استفاده از Viewها باعث میشود دادهها به صورت داینامیک در Templateها نمایش داده شوند و پروژه کاربرپسند و استاندارد باشد.
from django.shortcuts import render, get_object_or_404
from .models import Post
def post_list(request):
posts = Post.objects.all().order_by('-created_at')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})در این مثال، مقالات بر اساس تاریخ ایجاد مرتب شده و برای نمایش جزئیات از get_object_or_404 استفاده شده است تا در صورت عدم وجود مقاله، خطای ۴۰۴ نمایش داده شود.
طراحی Templateها و نمایش محتوا
Templateها بخش مهمی از پروژه Blog هستند که محتوا را به کاربران نشان میدهند. با استفاده از Templateها میتوان دادهها را مرتب، خوانا و داینامیک نمایش داد و صفحات پروژه استاندارد و کاربرپسند ساخت.
<!-- blog/post_list.html -->
{% extends 'base.html' %}
{% block content %}
<h1>لیست مقالات</h1>
<ul>
{% for post in posts %}
<li><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a> - {{ post.author.username }}</li>
{% endfor %}
</ul>
{% endblock %}<!-- blog/post_detail.html -->
{% extends 'base.html' %}
{% block content %}
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<p>نویسنده: {{ post.author.username }} | تاریخ انتشار: {{ post.created_at }}</p>
{% endblock %}این Templateها باعث میشوند مقالات به صورت مرتب و استاندارد نمایش داده شوند و کاربران تجربه خوبی از سایت داشته باشند.
افزودن URLها و مسیریابی
برای دسترسی به صفحات Blog، باید URLها را تعریف کنیم. استفاده از path و include باعث میشود پروژه سازمانیافته و قابل توسعه باقی بماند و هر View به مسیر مشخصی مرتبط شود.
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('<int:pk>/', views.post_detail, name='post_detail'),
]این تعریف URLها باعث میشود صفحات لیست مقالات و جزئیات هر مقاله به راحتی قابل دسترسی باشند و ساختار پروژه استاندارد باقی بماند.
جمعبندی پروژه Blog ساده
در این پروژه کوچک، یک سیستم مدیریت مقالات ساده با استفاده از جنگو ایجاد شد. مدلها، Viewها، Templateها، URLها و پنل Admin پیادهسازی شدند و امکان افزودن، نمایش و مدیریت مقالات فراهم شد. این پروژه تمرینی باعث میشود مهارتهای عملی جنگو تقویت شود و آماده ورود به پروژههای پیچیدهتر و حرفهای باشیم. با تسلط بر این بخش، میتوان صفحات داینامیک و سیستمهای مدیریت محتوا استاندارد ساخت و مهارتهای توسعه وب را به شکل عملی و کاربردی ارتقا داد.