حذف داده – Delete
برای حذف یک رکورد از مدل در جنگو، مطابق روال استاندارد، ابتدا باید یک تابع (view) اختصاصی در فایل views.py ایجاد کنیم. همانند عملیات ویرایش، فرآیند حذف نیز همیشه مربوط به یک رکورد خاص است؛ بنابراین نیاز داریم تا یک شناسهٔ منحصربهفرد — معمولا فیلد id — را بهعنوان پارامتر ورودی دریافت کنیم. این فیلد بهصورت پیشفرض در هر مدل Django وجود دارد، مقدار آن منحصربهفرد (unique=True) بوده و پس از ایجاد قابل تغییر نیست.
در فایل coreapp/views.py، تابعی به نام ProjectDelete تعریف میکنیم که مسئول بازیابی و حذف پروژه مورد نظر از پایگاه داده خواهد بود.
coreapp/views.py
def ProjectDelete(request, uid):
projectObj = models.Project.objects.get(id = uid)
if request.method == 'POST':
projectObj.delete()
return redirect('Projects')
- عملیات حذف فقط در پاسخ به درخواست
POSTانجام میشود تا از حذف تصادفی یا از طریق لینک ساده (مثلا با کلیک یا پیمایش خودکار) جلوگیری شود.
مطابق روال همیشگی، برای دسترسی به view، یک الگوی URL تعریف میکنیم که شناسه پروژه (uid) را بهعنوان پارامتر دریافت کند.
coreapp/urls.py
urlpatterns = [
...,
path('project-delete/<str:uid>/', views.ProjectDelete, name='ProjectDelete'),
]
در تمپلیت نمایش جزئیات پروژه (read-project.html)، یک فرم و گزینه حذف تعریف میکنیم که با بهرهگیری از ویژگی action فرم، شناسه پروژه را برای حذف به الگوی مسیر تعریف شده هدایت خواهد کرد.
coreapp/templates/project-read.html
<form action="{% url 'ProjectDelete' project.id %}" method="post">
{% csrf_token %}
<button type="submit">Delete</button>
</form>
- حضور تگ
{% csrf_token %}برای جلوگیری از حملات CSRF (Cross-Site Request Forgery) الزامی است. بدون آن، درخواستPOSTتوسط جنگو رد خواهد شد. - ویژگی
actionدر تگ<form>مشخص میکند که دادههای فرم (وقتی کاربر روی دکمهtype="submit"کلیک میکند) به کجا ارسال شوند. در صورتی که آدرسی برای ویژگیactionفرم تعیین نشده باشد -action=""- باشد یا وجود نداشته باشد (<form method="post">)، دادهها به همان آدرسی که فرم در آن قرار دارد ارسال خواهند شد.
فرآیند حذف از دید کاربر به این صورت خواهد بود که، کاربر به لیست پروژهها (/projects/) مراجعه کرده و بر روی عنوان یک پروژه کلیک کرده و به صفحه جزئیات آن (/read-project/...) هدایت میشود. در آن صفحه، با انتخاب گزینه حذف «Delete»، یک درخواست POST به آدرس /project-delete/<id>/ ارسال شده و پروژه از پایگاه داده حذف و کاربر به لیست پروژهها بازمیگردد.