دوره‌ها / Django / CreateView, UpdateView, DeleteView (CRUD Views)

CreateView, UpdateView, DeleteView (CRUD Views)

15 دقیقه Article

CRUD Views: ساخت، ویرایش، حذف ✏️

جنگو سه CBV آماده برای عملیات CRUD داره: CreateView, UpdateView, و DeleteView. این‌ها کار ساخت، ویرایش و حذف رو خیلی راحت می‌کنن!

CreateView: ساخت آیتم جدید

برای ساخت یک پست جدید:

# blog/views.py
from django.views.generic import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Post
from .forms import PostForm

class PostCreateView(CreateView):
    model = Post
    form_class = PostForm
    template_name = 'blog/post_form.html'
    success_url = reverse_lazy('post_list')

class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm
    template_name = 'blog/post_form.html'
    success_url = reverse_lazy('post_list')

class PostDeleteView(DeleteView):
    model = Post
    template_name = 'blog/post_confirm_delete.html'
    success_url = reverse_lazy('post_list')
CreateView چطور کار می‌کنه:
  1. یک فرم خالی نمایش می‌ده (GET)
  2. داده‌های فرم رو می‌گیره (POST)
  3. اعتبارسنجی می‌کنه
  4. ذخیره می‌کنه
  5. به success_url redirect می‌کنه

UpdateView: ویرایش

UpdateView شبیه CreateView است، ولی با یک تفاوت: باید pk یا slug رو از URL بگیره:

# blog/urls.py
path('<int:pk>/edit/', PostUpdateView.as_view(), name='post_edit'),

# در ویو، UpdateView به طور خودکار object رو از pk می‌گیره
class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm
    template_name = 'blog/post_form.html'
    success_url = reverse_lazy('post_list')

DeleteView: حذف

DeleteView یک صفحه تایید نمایش می‌ده و بعد حذف می‌کنه:

# blog/templates/blog/post_confirm_delete.html
<form method="post">
    {% csrf_token %}
    

آیا مطمئن هستید که می‌خواهید "{{ object.title }}" را حذف کنید؟

<button type="submit">بله، حذف کن</button> لغو </form>

استفاده از Mixins

می‌تونید Mixin ها رو برای اضافه کردن قابلیت استفاده کنید:

# blog/views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.mixins import PermissionRequiredMixin

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    form_class = PostForm
    # فقط کاربران لاگین شده می‌تونن پست بسازن

class PostDeleteView(PermissionRequiredMixin, DeleteView):
    model = Post
    permission_required = 'blog.can_delete_post'
    # فقط کاربرانی که permission دارن می‌تونن حذف کنن
Mixin های مفید:
  • LoginRequiredMixin: نیاز به لاگین
  • PermissionRequiredMixin: نیاز به permission
  • UserPassesTestMixin: تست سفارشی

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.

برای ذخیره پیشرفت وارد شوید