問題起因:由於本項目是前后端分離,所以在原本的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
})、如此完美解決了該問題