如何在django-rest-framework 3.0序列化程序中检查OPTIONS请求?

时间:2015-05-26 13:45:48

标签: rest http serialization django-rest-framework

我正在尝试使用DRF 3.0中的动态字段创建一个序列化程序,如here所述。我应该为POST,GET和OPTIONS请求返回不同的字段。

但是,当我向服务器发出OPTIONS请求时,似乎在request.method中使用“POST”调用了我的序列化程序。 我也调查了request._method,但这是一回事。那么,我如何区分'POST和'OPTIONS'?

感谢。

2 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。首先不明白为什么,启用我的自定义权限类后,我没有在元数据中收到有关ACTIONS的任何信息。阿德拉恩在这里指出了正确的方向。

作为一个解决方案,我在我的权限类中添加了一个额外的'if',它将request._request.method检查为OPTIONS,如下所示:

    if request.method == 'POST' or request.method == 'DELETE':
        # Make an exception for redirected OPTIONS requests
        # See: http://stackoverflow.com/questions/30460409/how-do-i-check-for-options-request-in-django-rest-framework-3-0-serializer
        if request._request.method == "OPTIONS":
            return True 

希望这有助于任何人。

答案 1 :(得分:1)

如果您使用的是jQuery Ajax,可以尝试在Ajax选项中添加以下选项:

headers: {'X-HTTP-Method-Override': 'OPTIONS'}

我必须做同样的事情来发送PATCH请求。