django rest + axios put请求错误403
Posted
技术标签:
【中文标题】django rest + axios put请求错误403【英文标题】:django rest + axios put request error 403 【发布时间】:2018-08-06 15:07:14 【问题描述】:我已经阅读了副本,但似乎没有任何效果。我可以直接从 url 中的表单执行 put 请求,但我似乎无法让 axios 请求正常工作。
我试过了:
CSRF with Django, React+Redux using Axios https://gist.github.com/paltman/490049a64fa4115a2cea
我的观点.py:
class FrequencyList(generics.ListCreateAPIView):
queryset = Frequency.objects.all()
serializer_class = FrequencySerializer
class FrequencyDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Frequency.objects.all()
serializer_class = FrequencySerializer
我的 axios 请求:
axios(
method: 'put',
url: '/f/'+id,
data:
item: item,
,
).then(function (response)
this.setState(needReceipt: true);
)
.catch(function (error)
console.log(error);
);
在我的 settings.py 中:
REST_FRAMEWORK =
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
在我的 webpack.config.dev.js 中:
const axios = require('axios');
axios.defaults.xsrfHeaderName = "X-CSRFToken";
axios.defaults.xsrfCookieName = "csrftoken";
【问题讨论】:
在您的API
课堂上。您是否尝试过覆盖permission_classes = ()
?
对不起。您已经在聊天中获得了权限。
【参考方案1】:
试试这个
axios.put('/f/'+id, item: item )
.then(function(response)
this.setState(needReceipt: true);
);
Reference
【讨论】:
403(禁止) 对不起,它的 axios.put 不是 axios.post。更新了我的答案。检查 django 控制台的 url,确保它访问相同的 url,如/f/123
并放置方法和响应。如果您仍然面临 403,则将 permission_classes = (AllowAny,)
添加到类(FrequencyDetail)
我已经尝试了上述所有建议,但仍然出现错误。错误如下: PUT localhost:8000/f/89 403 (Forbidden) 我可以物理上去 url 并手动输入 put,所以我知道 id 是正确的。
所以 put 请求工作正常而 axios.put 请求失败,这就是问题所在。你是如何成功提出请求的,是通过邮递员。如果是,请检查标头。如果不存在标头,则删除 X-CSRFToken 令牌和其他标头。
让我们continue this discussion in chat.以上是关于django rest + axios put请求错误403的主要内容,如果未能解决你的问题,请参考以下文章
无法从 reactjs 中的 axios 向 id=1 文章的 django REST API 后端发出 GET 请求
Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计