Django查看调用api

时间:2018-01-22 10:03:33

标签: python django django-rest-framework

所以我使用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

1 个答案:

答案 0 :(得分:1)

我不确定您要拨打的API,但我认为您可能需要在帖子请求中发送data而不是params

r = requests.post('http://127.0.0.1:8000/api/test/', data=request.POST)