2016-10-24 5 views
0

나는 그냥 장고보기와 아약스 요청 사이의 연결을 이해하려고했지만 스위치를 켜고 끄는 동안 오류가 발생합니다. 나는 온/오프를 위해 사용되는 간단한 스위치를 가지고있다. 스위치를 사용하는 사용자는 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