2016-10-24 44 views
0

我只是想了解ajax請求與django視圖之間的連接,但是在打開和關閉切換時出現錯誤。我有一個簡單的開關,用於打開和關閉。當用戶在交換機上時,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