#javascript #ajax #django #reactjs #django-views
#javascript #ajax #django #reactjs #django-просмотры
Вопрос:
Я просто пытался понять связь между 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")
Интерфейсная форма
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>
);
}
}
Ответ №1:
Вы отправляете JSON, но запрашиваете.ПУБЛИКАЦИЯ будет содержать только данные в кодировке формы.
У вас есть несколько вариантов. Первое — использовать application/x-www-form-urlencoded
в качестве типа контента, затем вы можете использовать request.POST
.
В качестве альтернативы вы можете получить строку json из request.body
и десериализовать ее.
data = json.loads(request.body.decode('utf-8'))
toggle = data.get('toggle', '')
Комментарии:
1. запрос. тело сработало для меня. Спасибо за вашу поддержку.