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);

htmljavascript文件中,应在脚本标记之前使用此脚本。

<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 视图层

使用请求对象访问 django 视图中的 html 表单字段

Django

Django回顾--获取请求参数的几种方式

只有 Django request.body 包含数据(不是 request.POST)

Django - 日期和时间字段说明