【问题标题】:DJango rest framework createapiviewDJango 休息框架 createapiview
【发布时间】:2016-03-23 00:14:23
【问题描述】:

我正在使用 Django rest 框架 CreateAPIView 创建一些数据,这是视图。

class CompanyCreateApiView(CreateAPIView):

    def post(self, request, *args, **kwargs):
        print 'request ==', request
        for each in args:
            print 'args ==', each
        for each in kwargs:
            print 'keargs ==', each
        import json
        data=json.dumps({'status':'success'})
        return Response(data, status=status.HTTP_200_OK)

现在我使用 python 请求模块调用此视图集,并且看不到在 *Args 或 **kwargs 参数中打印的发布数据

**

import requests
r = requests.post('http://127.0.0.1:8000/api/create-company-profile/',data={'key':'value'})
print r.status_code
print r.text

**

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您不会在其中看到任何 POST 数据;相反,您将在request.data 中看到它。如django-rest-framework documentation中所述:

    request.data 返回请求正文的解析内容。这类似于标准的 request.POST 和 request.FILES 属性,除了:

    • 它包括所有已解析的内容,包括文件和非文件输入。
    • 支持解析除POST以外的HTTP方法的内容,即可以访问PUT和PATCH请求的内容。
    • 支持REST框架灵活的请求解析,而不仅仅是支持表单数据。例如,您可以像处理传入的表单数据一样处理传入的 JSON 数据。

    【讨论】:

      【解决方案2】:

      你看不到任何响应,因为它们是空的,就像

      for item in []:
         print item
      

      它不能遍历空数据,但如果你在 url 中发送一个值:

      url(r'^/api/create-company-profile/(?P<name>\w+)/$', CompanyCreateApiView.as_view()),
      

      kwargs 将具有以下值 {"name": comany_name}

      为了检索您使用 request.data 的请求正文中发送的数据,您还可以在 Internet 上找到一些示例,例如 request.DATArequest.QUERY_PARAMS,但在较新版本的 django 中已弃用并替换为request.data

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 2021-11-26
        • 1970-01-01
        • 2015-02-25
        • 2016-04-25
        • 2016-06-20
        • 1970-01-01
        相关资源
        最近更新 更多