【问题标题】:What is the difference between request.POST and dictionary data in django forms?django 表单中的 request.POST 和字典数据有什么区别?
【发布时间】:2018-02-24 04:14:48
【问题描述】:

在不使用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和字典数据有区别吗,有问题吗?提前感谢您的帮助。

【问题讨论】:

    标签: django-forms django-views django-class-based-views


    【解决方案1】:

    那是因为没有指定编码,而且你想更新字典,所以不推荐将可变设置为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 for django 发送 post 请求,您需要设置所需的标头。

    预 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 标签之前。

    <script type="text/javascript" src="{% static 'pre-ajax.js' %}"></script>

    <script type="text/javascript" src="{% static 'your-script-that-send-post.js' %}">

    【讨论】:

    • 你好jackotonye;当我尝试 request.post 复制方法时,返回值为空。我想我可以使用 ajax 发送数据。我必须使用 request.body 方法。使用此方法时如何清理数据(对于 request.body )。你有什么想法吗。非常感谢你的回复。
    • 我还用表单 is_valid function.data = QueryDict(request.body, encoding='utf-8', mutable=True) 添加了 control is false ,这个方法导致表单返回不正确。跨度>
    • 您是否在 Ajax 请求中将 'X-CSRFToken' 作为标头发送。
    • 当我编写上述代码时,我收到以下错误:codeUncaught ReferenceError: require is not defined for const Cookies = require('js-cookie');code
    • 当我在 ajax 代码中进行以下更正时,我能够获取 request.POST 数据,contentType: 'application/x-www-form-urlencoded;charset=utf-8' ,但是当我检查表单 is_valid 时,我仍然得到 false 的值。
    猜你喜欢
    • 2022-11-23
    • 2019-07-27
    • 1970-01-01
    • 2018-04-21
    • 2012-03-14
    • 2012-04-03
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多