Django rest framework 使用Alamofire发布数据时CSRF失败

Django rest framework 使用Alamofire发布数据时CSRF失败,django-rest-framework,alamofire,Django Rest Framework,Alamofire,我使用django reat框架作为后端,并使用SessionAuthentication和TokenAuthentication。 当我使用httpie发送请求时,这个功能很好地工作 httpposthttp://127.0.0.1:8000/api/users/ 电子邮件=”abc@abc.com“user\u name=“abc”passwod=“1234” 但是当我使用阿拉莫菲尔的时候 Alamofire.request(.POST, "http://127.0.0.1:8000/api

我使用django reat框架作为后端,并使用SessionAuthentication和TokenAuthentication。 当我使用httpie发送请求时,这个功能很好地工作

httpposthttp://127.0.0.1:8000/api/users/ 电子邮件=”abc@abc.com“user\u name=“abc”passwod=“1234”

但是当我使用阿拉莫菲尔的时候

Alamofire.request(.POST, "http://127.0.0.1:8000/api/users/", parameters: ["email": emailField.text!, "user_name": usernameField.text!, "password": passwordField.text!], encoding: .URL )
            .responseJSON { response in
                print(response.request)  // original URL request
                print(response.response) // URL response
                print(response.data)     // server data
                print(response.result)
                if let JSON = response.result.value {
                    print("JSON: \(JSON)")
                }
        }
还这个

Optional(<NSMutableURLRequest: 0x7fe24e15d640> { URL: http://127.0.0.1:8000/api/users/ })
Optional(<NSHTTPURLResponse: 0x7fe24bf3a080> { URL: http://127.0.0.1:8000/api/users/ } { status code: 403, headers {
    Allow = "GET, POST, HEAD, OPTIONS";
    "Content-Type" = "application/json";
    Date = "Fri, 11 Mar 2016 13:09:59 GMT";
    Server = "WSGIServer/0.2 CPython/3.4.3";
    Vary = "Accept, Cookie";
    "X-Frame-Options" = SAMEORIGIN;
} })
Optional(<7b226465 7461696c 223a2243 53524620 4661696c 65643a20 43535246 20746f6b 656e206d 69737369 6e67206f 7220696e 636f7272 6563742e 227d>)
SUCCESS
JSON: {
    detail = "CSRF Failed: CSRF token missing or incorrect.";
}
可选({URL:http://127.0.0.1:8000/api/users/ })
可选({URL:http://127.0.0.1:8000/api/users/ }{状态代码:403,标题{
Allow=“GET、POST、HEAD、OPTIONS”;
“内容类型”=“应用程序/json”;
日期=“2016年3月11日星期五13:09:59 GMT”;
Server=“WSGIServer/0.2 CPython/3.4.3”;
Vary=“接受,Cookie”;
“X-Frame-Options”=SAMEORIGIN;
} })
可选()
成功
JSON:{
detail=“CSRF失败:CSRF令牌丢失或不正确。”;
}

但是127.0.0.1:8000/api/users/不需要任何权限,而且我在使用httpie时没有发送csrf令牌。那么,这里出了什么问题?

向使用Django创建的api发布/删除请求需要一个有效的csrftoken随请求一起传递

在进行任何POST调用之前,需要生成令牌。要生成令牌,请参阅

同样,在从cookie获取csrftoken值之后,将令牌传递到请求的头中

        let headers = [ "Accept":"application/json" ,  "Content-Type": "application/json" , "X-CSRFToken" : csrftoken]


        Alamofire.request(.POST, "http://127.0.0.1:8000/api/users/", headers: headers, parameters: params, encoding:  .JSON)
            .validate()
            .responseJSON { response in

                switch response.result {
                case .Success(let responseContent):

在相应的API视图中,从身份验证类中执行会话身份验证。它将“禁用”此视图的Cookie,这意味着不再需要CSRF令牌

此标题适用于我:

let headers = [
   "Cookie": ""
]


Alamofire.request(urlString, method: .post, parameters: ["username": username!, "password": password!],encoding: JSONEncoding.default, headers: headers).responseJSON {
    response in
    switch response.result {
           case .success:
                print(response)                    
                break
            case .failure(let error):
                print(error)
    }

}

从此处开始:

您能否提供生成令牌的解决方案?