我正在尝试使用Django REST API删除“产品”对象,但不知道该怎么做。
序列化器:
def create_product(request):
data = request.POST
serializer = ProductSerializer(data=data)
if serializer.is_valid():
serializer.save()
我可以使用此功能创建产品
npm install -g --production windows-build-tools
但是我不知道如何删除
没有serializer.delete()方法。
答案 0 :(得分:1)
首先,您应该知道如何使用 django rest_framework 中的 Router 和 ModelViewSet 以及 GenericViewSet 类,而不是 Product 应用程序,假设您有 Customer 应用程序。 你应该从 views.py 中的 views.ModelViewSet 或 views.GenericViewSet 和 mixins.DestroyModelMixin 继承你的类视图集,就像吹一样
class CustomerViewSet(viewsets.GenericViewSet, mixins.DestroyModelMixin):
或
class CustomerViewSet(viewsets.ModelViewSet):
并像这样为该视图集定义 serilaizer 类
class CustomerViewSet(viewsets.GenericViewSet, mixins.DestroyModelMixin):
serilaizer_class = CustomerSerializer
那么你应该在你的 appName 文件夹中为所有对 api 的请求定义路由器 并且您应该在该文件夹中创建 urls.py 文件,如下所示
<块引用>you can see customer app folder in my project and urls.py
在 urls.py 中像这样定义路由器和 url 模式
<块引用>app_name variable define the name of url used by revers function
转到应用程序文件夹 (app/urls.py) 中的 urls.py 并定义如下路径“您应该定义一个路径来引用 customer/urls.py .. 我们创建 customer/urls.py在上一步中"
<块引用>OK .. 在浏览器中运行你的项目并输入你的本地主机地址 http://(您的本地主机地址)/api/customer/customers/1/ 带有 DELETE 请求(不是 POST、GET 或 PATCH 请求)
这是一些关于路由器和视图集的链接
<块引用>路由器:https://www.django-rest-framework.org/api-guide/routers/
<块引用>模型视图集:https://www.django-rest-framework.org/api-guide/viewsets/#modelviewset
<块引用>通用视图集:https://www.django-rest-framework.org/api-guide/viewsets/#genericviewset
答案 1 :(得分:0)
您可以使用查询集来做到这一点:
@api_view(["DELETE"])
def product_delete_rest_endpoint(request, product_id):
Product.objects.get(id=product_id).delete()
return Response()
答案 2 :(得分:0)
如果您的视图(集合)是从DestroyModelMixin
继承的,或者是从其继承的视图集,例如开箱即用地支持ModelViewSet
,http DELETE
。您可以进行卷曲测试,例如curl -X DELETE "http://localhost:8000/your-api/products/<product-id>"
。
答案 3 :(得分:0)
我不确定您在哪里使用ModelViewset
类作为视图。无论如何,如果您要进行CRUD操作,我都会推荐它。
views.py
from rest_framework import viewsets
class ProductAPI(viewsets.ModelViewSet):
serializer_class = ProductSerializer
queryset = Product.objects.all()
urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'product', ProductAPI)
urlpatterns = [
# Your other patterns
] + router.urls
因此,您将获得如下的API集,
| API end-points | HTTP Method | Result |
|--------------------- |------------- |------------------------------------------ |
| /product | GET | List of product |
| /product | POST | Create new product |
| /product/{product_pk}| GET | Retrieve details of particular product |
| /product/{product_pk}| PUT | Fully update particular product's info |
| /product/{product_pk}| PATCH | Partially update particular product's info |
| /product/{product_pk}| DELETE | Delete particular product's details from DB |
因此,您要做的就是将一个HTTP Delete
请求发送到
/your-prefix/product/product_id/