Ember将数据存储到django后端

时间:2016-03-22 16:16:58

标签: django ember.js

我是Ember的新手,我正在尝试通过RESTful API与django服务器通信。到目前为止,我已经设法从服务器获取信息,但如果我尝试发回一些信息,我会收到“CSRF失败:CSRF令牌丢失或不正确”。错误。

在Chrome开发者工具的资源中,我可以看到我没有任何Cookie。我已经读过我应该在我的适配器中使用“X-CSRFToken”:“cookie”,但由于我没有cookie,所以我不知道该怎么做。

所以我走到了尽头...

这是我的代码:

服务器响应:

 [{"username":"user1","password":"123","email":"user1@example.com"},        
 {"username":"user2","password":"456","email":"user2@example.com"}]

Ember模特:

import DS from 'ember-data';

export default DS.Model.extend({
   username: DS.attr(),
   password: DS.attr(), 
   email: DS.attr()
});

Ember适配器:

import DS from 'ember-data';

   export default DS.RESTAdapter.extend({
    host: '/api',
    contentType: 'application/json',
    dataType: 'json',

  headers: {
    username: 'XXXX',
    password: 'XXXX'
}, 

buildURL: function(modelName, id, snapshot, requestType, query) {

    var url = this._super(modelName, id, snapshot, requestType, query);

    return url + "/";
}


});

Ember Serializer:

import DS from 'ember-data';

export default DS.JSONSerializer.extend({
    primaryKey: 'username'
});

Ember Route: import Ember from 'ember';

export default Ember.Route.extend({
    model() {
       return this.store.findAll('account');
}
});

Ember控制器:

import Ember from 'ember';

export default Ember.Controller.extend({

    actions: {

   signup(){
    console.log('My username is: ', this.get('username'));
    console.log('My password is: ', this.get('password'));
    console.log('My email is: ', this.get('email'));

    var account = this.store.createRecord('account', {
            username: this.get('username'),
            password: this.get('password'),
            email: this.get('email')
    });

    account.save();

}
}
});

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。 问题是我使用的是http://localhost:4200/而不是http://127.0.0.1:4200/,这就是为什么我找不到django的cookie。

一旦我找到了django的cookie,我就会在适配器的标题中添加一个属性。

我的新适配器如下所示:

Ember适配器:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
    host: '/api',
    contentType: 'application/json',
    dataType: 'json',

 headers: {
    "X-CSRF-Token": 'django token',
    username: 'XXXX',
    password: 'XXXX'
 }, 

 buildURL: function(modelName, id, snapshot, requestType, query) {

    var url = this._super(modelName, id, snapshot, requestType, query);

    return url + "/";
 }


 });