问题起因:由于本项目是前后端分离,所以在原本的django里使用template解决csrf问题是不现实的
解决过程:
1.在django的view里设置request的cookie,让他带csrftoke。
2.修改前端的代码,获取cooke和请求头里的token值做比较。
实现的代码如下:
后台view:
@require_http_methods(['GET',"POST"]) def register_or_login(request): print request request.META["CSRF_COOKIE_USED"] = True get_token(request) uf = UserForm(request.POST) print request.POST
......
前端代码如下:
methods: { back () { this.$router.back(-1) }, getCookie (name) { var value = '; ' + document.cookie var parts = value.split('; ' + name + '=') if (parts.length === 2) return parts.pop().split(';').shift() }, post里增加请求头内容 this.axios({ method: 'post', url: this.linkPrefix + '/users_api/register_or_login', headers: {'X-CSRFToken': this.getCookie('csrftoken')}, data: postData })、
如此完美解决了该问题
|