2016-10-24 10 views
0

私はちょうどdjangoのビューとajaxリクエストの間の接続を理解しようとしましたが、スイッチのオンとオフを切り替えている間にエラーが発生しています。私はオンとオフのために使用される簡単なスイッチを持っています。スイッチ上のユーザーは、djangoビューはrequest.postを介して値を取得する必要がありますが、私のajaxリクエストからデータを取得することはできません。私は何が間違っていたのか間違っていますか?投稿時に空のリクエストを取得

def toggle(request): 
    status = {} 
    if request.method=="POST": 
     print('request', request.POST.get('toggle', '')) 
     status['message'] = 'success' 
    else: 
     status['message'] = 'error' 
    return HttpResponse(json.dumps(status), content_type="application/json") 

frontendForm

class App extends Component { 
    constructor() { 
     super(); 
     this.state = { toggled: true }; 
    } 

    getChildContext() { 
     return { muiTheme: getMuiTheme(Style) }; 
    } 

    handleToggle = (event) => { 
     // console.log(event.target.getAttribute('data-isToggled')); 
     console.log(event.target.value); 
     this.setState({ 
      toggled: !this.state.toggled 
     }); 
     axios({ 
      method: 'POST', 
      url: '/toggle/', 
      headers: { 
       'X-CSRFToken': CSRF_TOKEN, 
       'Content-Type': 'application/json' 
      }, 
      data:{ 
       toggle:this.state.toggled 
      }, 
     }) 
     .then(response => { 
      console.log(response); 
     }) 
     .catch(error => { 
      console.log(error); 
     }); 
    } 

    render() { 
     return (
      <div className="automation" style={automationStyle}> 
       <form> 
        <Card style={{ padding: '5em' }}> 
         <CardHeader 
          title="Turn on/off light" 
          titleStyle={{fontSize: '24px'}} 
         /> 
         <CardText> 
         <Toggle 
          label="On/Off" 
          id="toggle" 
          onToggle={this.handleToggle} 
          data-isToggled={this.state.toggled} 
          toggled={this.state.toggled} 
          labelStyle={{ fontSize: '24px' }} 
          labelPosition="right" 
          className="toggle" 
         /> 
         </CardText> 
        </Card> 
       </form> 
      </div> 
     ); 
    } 

} 

答えて

2

あなたはJSONを投稿しているが、request.POSTは、フォームエンコードされたデータのみが含まれます。

あなたにはいくつかのオプションがあります。最初はコンテンツタイプとしてapplication/x-www-form-urlencodedを使用し、次にrequest.POSTを使用できます。

また、request.bodyからjson文字列を取得してデシリアライズすることもできます。

data = json.loads(request.body.decode('utf-8')) 
toggle = data.get('toggle', '') 
+0

request.body私のために働いた。ご協力ありがとうございました。 – Serenity

関連する問題