首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用django rest框架返回选项请求中的操作和参数

如何使用django rest框架返回选项请求中的操作和参数
EN

Stack Overflow用户
提问于 2017-11-03 09:12:26
回答 2查看 931关注 0票数 1

我试图返回使用django-countries和django rest框架的国家的选择选项列表。我使用JWT_AUTH进行身份验证。

当我尝试选项请求时:

代码语言:javascript
复制
curl \
  -H "Authentication: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFsYmVydG9fdmVudGEiLCJ1c2VyX2lkIjoyLCJlbWFpbCI6IiIsImV4cCI6MTUwODE2Mzg4Mn0.svxqTThCahSl1Vu27sMjuJyd1PRLk28-Xgn2OKKb5-g"\
  -X OPTIONS \
  -v http://127.0.0.1:8000/api/v1/core/perfilViajeroUserPass/

答复是:

代码语言:javascript
复制
{
 "name":"Perfil Viajero User Pass Create",
 "description":"",
 "renders":["application/json","text/html"],
 "parses":[
           "application/json",
           "application/x-www-form-urlencoded",
           "multipart/form-data"
          ]
}

但我认为在默认情况下应该是这样的:

代码语言:javascript
复制
{
"name": "To Do List",
"description": "List existing 'To Do' items, or create a new item.",
"renders": [
    "application/json",
    "text/html"
],
"parses": [
    "application/json",
    "application/x-www-form-urlencoded",
    "multipart/form-data"
],
"actions": {
    "POST": {
        "note": {
            "type": "string",
            "required": false,
            "read_only": false,
            "label": "title",
            "max_length": 100
        }
    }
}

}

有人能帮我吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 10:36:44

我已经找到了解决办法。

我将视图类类型从APIView更改为generics.CreateAPIView,并知道它有效。非常感谢。

票数 0
EN

Stack Overflow用户

发布于 2022-03-03 01:14:55

添加另一个答案,因为我最近遇到了同样的问题,发现这个问题有点令人费解--在发出OPTIONS请求时,Django Rest Framework使用视图的Metadata类来构造响应。默认的Metadata类是SimpleMetadata,正如提到的在医生里--然而,,只有在视图定义了方法get_serializer()时,SimpleMetadata才会将actions键添加到响应主体。我不知道为什么会这样,但是有关代码请参阅这里

rest_framework.generics.GenericAPIView 方法,因此(通过身份验证的)对这些视图的OPTIONS请求将返回一个具有actions键的响应体。但是rest_framework.views.APIView没有定义这个方法,所以actions键总是不存在。

如果您必须使用rest_framework.views.APIView,您可以通过在APIView类上定义一个get_serializer()方法来解决这个问题。这感觉有点烦躁,但我测试了它,它起作用了:

代码语言:javascript
复制
class MyView(views.APIView):
    def get_serializer(self):
        return MySerializer()

    def post(self):
        ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47092023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档