我试图返回使用django-countries和django rest框架的国家的选择选项列表。我使用JWT_AUTH进行身份验证。
当我尝试选项请求时:
curl \
-H "Authentication: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFsYmVydG9fdmVudGEiLCJ1c2VyX2lkIjoyLCJlbWFpbCI6IiIsImV4cCI6MTUwODE2Mzg4Mn0.svxqTThCahSl1Vu27sMjuJyd1PRLk28-Xgn2OKKb5-g"\
-X OPTIONS \
-v http://127.0.0.1:8000/api/v1/core/perfilViajeroUserPass/答复是:
{
"name":"Perfil Viajero User Pass Create",
"description":"",
"renders":["application/json","text/html"],
"parses":[
"application/json",
"application/x-www-form-urlencoded",
"multipart/form-data"
]
}但我认为在默认情况下应该是这样的:
{
"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
}
}
}}
有人能帮我吗?谢谢。
发布于 2017-11-06 10:36:44
我已经找到了解决办法。
我将视图类类型从APIView更改为generics.CreateAPIView,并知道它有效。非常感谢。
发布于 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()方法来解决这个问题。这感觉有点烦躁,但我测试了它,它起作用了:
class MyView(views.APIView):
def get_serializer(self):
return MySerializer()
def post(self):
...https://stackoverflow.com/questions/47092023
复制相似问题