CreateView, UpdateView, DeleteView (CRUD Views)
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 چطور کار میکنه:
- یک فرم خالی نمایش میده (GET)
- دادههای فرم رو میگیره (POST)
- اعتبارسنجی میکنه
- ذخیره میکنه
- به
success_urlredirect میکنه
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: نیاز به permissionUserPassesTestMixin: تست سفارشی
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.