所以我使用django视图来调用api post方法,但它给了我400错误
当我遇到csrf禁止错误b4时,我现在正在使用@csrf_exempt
。
我尝试在API本身上使用post方法,并使用视图来调用api。
然而,当使用视图来调用时,当两者都使用相同的帖子值发布时,我得到了400错误。
使用api发布: QueryDict:{'book':['Second'],'author':['Ban'],'date':['2018-01-10 08:00 AM']} [22 / Jan / 2018 18:56:09]“POST / api / test / HTTP / 1.1”200 61
使用视图发布: QueryDict:{} [22 / Jan / 2018 18:56:12]“POST / api / test /?book = Second +& author = Ban& date = 2018-01-10 + 08%3A00AM HTTP / 1.1”400 36 [22 / Jan / 2018 18:56:12]“POST / test / HTTP / 1.1”200 19
这是我的代码
models.py
class TestPost(models.Model):
book = models.CharField(max_length=10, blank=True, null=True)
author = models.CharField(max_length=10, blank=True, null=True)
date = models.DateTimeField(blank=True, null=True)
serializer.py
class TestPostSerializer(serializers.ModelSerializer):
date = serializers.DateTimeField(format="%Y-%m-%d %I:%M %p")
class Meta:
model = TestPost
fields = ('id', 'book', 'author', 'date')
views.py
from django.http import HttpResponse
import requests
def my_django_view(request):
if request.method == 'POST':
r = requests.post('http://127.0.0.1:8000/api/test/', params=request.POST)
else:
r = requests.get('http://127.0.0.1:8000/api/test/', params=request.GET)
if r.status_code == 200:
return HttpResponse('Yay, it worked')
return HttpResponse('Could not save data')
class TestPostViewSet(viewsets.ModelViewSet):
permission_classes = [AllowAny]
queryset = TestPost.objects.all()
serializer_class = TestPostSerializer
答案 0 :(得分:1)
我不确定您要拨打的API,但我认为您可能需要在帖子请求中发送data
而不是params
。
r = requests.post('http://127.0.0.1:8000/api/test/', data=request.POST)