🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ دانشجوی سون‌لرن
متد put و delete
جامعه پایتون (وب) ایجاد شده در ۱۱ مرداد ۱۴۰۲

متد‌های post و get گفته شد اما چطور میشه متد put و delete رو برای APIView نوشت؟

درود وقت بخیر

در فریمورک Django Rest Framework (DRF)، برای استفاده از متد‌های HTTP PUT و DELETE در کلاس‌های `APIView`، میتونین از دو (`mixins`) با نام‌های `UpdateModelMixin` و `DestroyModelMixin` استفاده کنید. این دو mixin توابع مربوط به متد‌های PUT و DELETE را به کلاس `APIView` اضافه می‌کنند.

برای استفاده از متد PUT در کلاس `APIView`:

from rest_framework.views import APIView
from rest_framework.mixins import UpdateModelMixin
from rest_framework.response import Response
class MyAPIView(APIView, UpdateModelMixin):
  def put(self, request, *args, **kwargs):
    # logic of put method
    # ...
    return Response("PUT request successful")
  # other class methods

برای استفاده از متد DELETE در کلاس `APIView`:

from rest_framework.views import APIView
from rest_framework.mixins import DestroyModelMixin
from rest_framework.response import Response
class MyAPIView(APIView, DestroyModelMixin):
  def delete(self, request, *args, **kwargs):
    # logic of delete method
    # ...
    return Response("DELETE request successful")


نکته: استفاده از متد‌های PUT و DELETE در `APIView` نیاز به تعریف دستی متد‌های `put` و `delete` دارد و شما باید منطق مربوط به این متد‌ها را خودتون پیاده‌سازی کنید. اگر از کلاس‌های `GenericAPIView` یا `APIView` همراه با `ViewSet` استفاده میکنه، این منطق به طور خودکار پیاده‌سازی میشخ و شما فقط باید اطلاعات مربوط به مدل و نام کوئری‌ست را در `queryset` و `lookup_field` تنظیم کنین.


موفق باشید ?

Reza Mobaraki ۱۱ مرداد ۱۴۰۲، ۰۷:۴۳

درسته اما زمانی که از serializer.save در put استفاده میکنی شی ساخته میشه. متد serializer.update هم پارامترهای instance و validated_date میگیره که نمیدونم چطور بهش پاس بدم!

salar keshavarzi ۱۱ مرداد ۱۴۰۲، ۰۸:۰۵

میتونید این موارد رو آوررایت کنید

و از متد serializer context این کارو انجام بدید ( پاس دادن instance )

بهترین پاسخ
Reza Mobaraki ۱۳ مرداد ۱۴۰۲، ۱۷:۳۵