mda*_*019 5 django http-post django-views django-rest-framework
我正在使用 django REST 框架创建一个简单的 REST API。我已通过向 api 发送 GET 请求成功获得响应,但由于我想发送 POST 请求,django Rest 框架默认不允许 POST 请求。
如下图所示,仅允许 GET、HEAD、OPTIONS,但不允许 POST 请求

views.py 中的 GET 和 POST 方法
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from profiles_api import serializers
from rest_framework import status
# Create your views here.
class HelloApiView(APIView):
"""Test APIView"""
#Here we are telling django that the serializer class for this apiViewClass is serializer.HelloSerializer class
serializer_class = serializers.HelloSerializer
def get(self, request, format=None):
"""Retruns a list of APIViews features."""
an_apiview = [
'Uses HTTP methods as fucntion (get, post, patch, put, delete)',
'It is similar to a traditional Django view',
'Gives you the most of the control over your logic',
'Is mapped manually to URLs'
]
#The response must be as dictionary which will be shown in json as response
return Response({'message': 'Hello!', 'an_apiview': an_apiview})
def post(self,request):
"""Create a hello message with our name"""
serializer = serializer.HelloSerializer(data=request.data)
if serializer.is_valid():
name = serializer.data.get('name')
message = 'Hello! {0}'.format(name)
return Response({'message':message})
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
如何在 django REST 框架中允许 POST 请求?
代码的问题是,您在语句def post()之后添加了该语句return。
要解决此问题,只需indentation按如下方式更正您的级别即可,
class HelloApiView(APIView):
def get(self, request, format=None):
return Response()
def post(self, request):
return Response()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9493 次 |
| 最近记录: |