request.POST和django表单中的字典数据有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了request.POST和django表单中的字典数据有什么区别?相关的知识,希望对你有一定的参考价值。
当我在不使用ajax的情况下编写这样的代码时没问题:
form = UploadForm(request.POST, request.FILES)
但是当我使用ajax时,我写这样的代码时出错(post:500(Internal Server Error)):
data = request.body.decode('utf-8')
data = QueryDict(data)
form = {
"product_name": data.get('name'),
"description": data.get('description'),
"price": data.get('price'),
"quantity": data.get('quantity')
}
form = UploadForm(data=form)
我不知道该怎么做,但需要获取这个字典数据的形式。在request.post和字典数据之间有区别,这是一个问题吗?预先感谢您的帮助。
答案
那是因为没有指定编码,因为你想要更新dict,所以将mutable设置为True
,这是不推荐的。
# To get a mutable copy of the POST data using copy.
import copy
data = copy.copy(request.POST)
# Unsafe
data = QueryDict(request.body, encoding='utf-8', mutable=True)
data['b'] = '1'
要使用Ajax为django发送post请求,您需要设置所需的标头。
Pre Ajax设置:pre-ajax.js
const Cookies = require('js-cookie');
(($) => {
const csrfSafeMethod = method => /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);
$.ajaxSetup({
beforeSend(xhr, settings) {
if (!csrfSafeMethod(settings.method) && !this.crossDomain) {
xhr.setRequestHeader('X-CSRFToken', Cookies.get('csrftoken'));
}
},
});
})(window.jQuery);
在html或javascript文件中,应在脚本标记之前使用此脚本。
<script type="text/javascript" src="{% static 'pre-ajax.js' %}"></script>
<script type="text/javascript" src="{% static 'your-script-that-send-post.js' %}">
以上是关于request.POST和django表单中的字典数据有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
使用请求对象访问 django 视图中的 html 表单字段