Python 如何在django中从预写视图中删除put
我有以下看法:Python 如何在django中从预写视图中删除put,python,django,Python,Django,我有以下看法: class ReadClass(generics.RetrieveUpdateDestroyAPIView): queryset = MyCModel.objects.all() serializer_class = MySerializer def post(self, request, *args, **kwargs): ''' defined my post here''' 我知道retrieveupdatedestroyapi视
class ReadClass(generics.RetrieveUpdateDestroyAPIView):
queryset = MyCModel.objects.all()
serializer_class = MySerializer
def post(self, request, *args, **kwargs):
''' defined my post here'''
我知道retrieveupdatedestroyapi
视图中没有post。我在这里和前端的视图中创建了我自己的帖子,我看到了post和put!有没有什么办法可以去掉这个推杆
或者有没有其他更好的方法,我尝试使用ListCreateApi视图
。问题是,虽然它给了我post功能,但它列出了所有的值,而我正在寻找一个特定的pk
。我看不到任何其他提供get
和post
功能的通用视图
编辑
我已经按要求添加了编辑,现在这里可能没有必要尝试,但稍后我会添加更多功能
class ReadClass(generics.GenericAPIView, mixins.CreateModelMixin, mixins.RetrieveModelMixin):
queryset = MyCModel.objects.all()
serializer_class = MySerializer
def post(self, request, *args, **kwargs):
try:
s1 = MySerializer.objects.get(mRID=kwargs["pk"])
serializer = MySerializer(s1, data=request.data)
except MySerializer.DoesNotExist:
pass
if serializer.is_valid():
if flag == 0:
pass
else:
serializer.update(s1,validated_data=request.data)
else:
return Response(serializer.errors)
urlpatterns = [path('temp/<int:pk>', ReadClass.as_view(), name = " reading"),]
class ReadClass(generics.GenericAPIView、mixins.CreateModelMixin、mixins.RetrieveModelMixin):
queryset=MyCModel.objects.all()
序列化程序\u class=MySerializer
def post(自我、请求、*args、**kwargs):
尝试:
s1=MySerializer.objects.get(mRID=kwargs[“pk”])
serializer=MySerializer(s1,data=request.data)
除MySerializer.DoesNotExist外:
通过
如果序列化程序.u有效():
如果标志==0:
通过
其他:
serializer.update(s1,validated_data=request.data)
其他:
返回响应(序列化程序错误)
urlpatterns=[path('temp/',ReadClass.as_view(),name=“reading”),]
DRF具有列表、创建、检索、更新和删除功能的混合功能。通用视图只是将这些混合体组合起来。您可以根据自己的具体需要选择这些混音器的任何子集。在您的情况下,如果您只想创建和检索功能,可以这样编写视图:
class ReadClass(GenericAPIView, CreateModelMixin, RetrieveModelMixin):
queryset = MyCModel.objects.all()
serializer_class = MySerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
这将为post和get请求提供默认功能。如果愿意,可以像在示例中一样重写post方法,以自定义post REQUEST行为
你可以阅读更多关于mixin和泛型视图的内容我理解你的意思,即使在实现了它之后,我也只能发表文章,上面写着
“detail”:“Method\”GET\“not allowed”。
。此外,它还显示Allow:POST,OPTIONS
。否GET
Retrieve方法用于检索单个项目,而不是列表。因此,要检索,您需要向/view\u path/id发送请求,这正是我正在做的。我可以看到检索在retrieveupdatedestroy
中工作,url类型为view\u path/id
,但不在模型mixin中。您可以发布url.py和更新的视图定义吗?mixin提供诸如检索/列表/创建/更新/销毁等方法,当子类化GenericAPIView时,需要将请求方法链接到这些方法。但是,如果将ViewSet和子类GenericViewSet与mixin一起使用,则不需要编写get/post等方法,但在这种情况下,需要使用路由器以不同的方式进行url绑定