我正在尝试使用djangorestframework(DRF:http://django-rest-framework.org/)视图向RESTful API Django Web服务发送HTTPS PUT请求。由于Django的跨站点请求伪造(CSRF)保护,我无法使其工作。
PUT请求旨在允许未经身份验证的用户添加资源。
我考虑过/尝试过:
X-Requested-With: XMLHttpRequest
标头(我控制客户端)。不起作用 - 我仍然收到CSRF错误。@crsf_exempt
装饰器。如果可以的话,我会 - 框架定义一个类,而不是一个视图。我目前最好的选择是自己编写PUT视图而不使用DRF的View类。然后我可以成功使用@crsf_exempt
装饰器。
我想使用DRF的View类 - 但是看不清楚如何。你能吗?
答案 0 :(得分:4)
感谢James Cran Wellward,我也能够通过使用method_decorator来解决这个问题。
class ExampleView(ResponseMixin,View):
renderers=DEFAULT_RENDERERS
def get(self,request):
response=Response(200,{'msg':'called via GET'})
return self.render(response)
def post(self,request):
response=Response(200,{'msg':'called via POST'})
return self.render(response)
@method_decorator(csrf_exempt):
def dispatch(self,*args,**kwargs):
return super(EampleView,self).dispatch(*args,**kwargs)
然后测试它:
curl -X GET http://www.example.com/rest/exampleview/
返回:
{msg: 'called via GET'}
和
curl -X POST http://www.example.com/rest/exampleview/
返回:
{msg: 'called via POST'}
HTH。请参阅original post。