我是Django Rest_Framework的新手。我正在尝试实现基于函数的视图,但面临put方法的问题

时间:2020-03-13 15:29:52

标签: python django django-rest-framework

我想知道如何在给定特定ID的情况下访问特定对象,然后对其进行更新。我目前收到“不允许使用405方法”错误。

如上所述是否可以通过ID访问对象,还是必须以其他方式解决问题?

我的代码如下:

views.py

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from home.models import example
from home.serializers import exampleSerializer

@api_view(['GET', ])
def exampleview(request):
    try:
        ex=example.objects.all()
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="GET":
        serializer=exampleSerializer(ex, many=True)
        return Response(serializer.data)

@api_view(['PUT', ])
def exampleputview(request):
    try:
        ex1=example.objects.get(id=id)
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="PUT":
        serializer=exampleSerializer(ex1, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(status=status.HTTP_404_NOT_FOUND)

urls.py
from django.contrib import admin
from django.conf.urls import url
from home import views

urlpatterns = [
    url('admin/', admin.site.urls),
    url('home/',views.exampleview),
    url('home/<int:id>/',views.exampleputview),
]

1 个答案:

答案 0 :(得分:1)

如您在URL中所述,

PUT方法需要一个id值,

尝试将 id 放入函数参数

@api_view(['PUT', ])
def exampleputview(request, id):
    try:
        ex1=example.objects.get(id=id)
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="PUT":
        serializer=exampleSerializer(ex1, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(status=status.HTTP_404_NOT_FOUND)