当前位置: 首页 > 面试题库 >

在Django中以字符串形式获取请求正文

郝昊东
2023-03-14
问题内容

我正在将带有JSON正文的POST请求发送到Django服务器(相当标准)。在服务器上,我需要使用进行解码json.loads()

问题是如何获取字符串格式的请求正文?

我目前有以下代码:

body_data = {}
if request.META.get('CONTENT_TYPE', '').lower() == 'application/json' and len(request.body) > 0:
    try:
        body_data = json.loads(request.body)
    except Exception as e:
        return HttpResponseBadRequest(json.dumps({'error': 'Invalid request: {0}'.format(str(e))}), content_type="application/json")

但是,这给出了一个错误the JSON object must be str, not 'bytes'

如何以正确的编码将请求的主体作为字符串检索?


问题答案:

请求主体,request.body是一个字节字符串。在Python
3中,json.loads()将仅接受unicode字符串,因此您必须先进行解码,request.body然后再将其传递给json.loads()

body_unicode = request.body.decode('utf-8')
body_data = json.loads(body_unicode)

在Python 2中,json.loads将接受unicode字符串或字节字符串,因此不需要解码步骤。

解码字符串时,我认为您可以假设’utf-8’是安全的-我找不到确切的来源,但是请参阅jQuery
docs的
以下引文:

注意:W3C XMLHttpRequest规范规定该字符集始终为UTF-8。指定另一个字符集不会强制浏览器更改编码。

在Python
3.6中,json.loads()接受bytes或bytearrays。因此,您不需要解码request.body(假设它以UTF-8编码)。



 类似资料:
  • 问题内容: 是否可以在表单类中获取request.user数据?我想清理一个电子邮件地址以确保它是唯一的,但是如果它是当前用户的电子邮件地址,则它应该通过。 这是我目前拥有的东西,非常适合创建新用户,但是如果我要编辑用户,则会遇到他们的电子邮件无法验证的问题,因为它已经被采用。如果我可以使用request.user.email检查这是他们的电子邮件,则可以解决我的问题,但是我不确定该怎么做。 问题

  • 我使用的是spring boot Version-2.0.6.Release和spring cloud Version-finchley.sr2

  • 问题内容: xml看起来像这样: 我正在使用stax一次处理一个“ ”,并且可以正常工作。我需要以字符串的形式获取整个语句节点,以便创建“ 123.xml”和“ 456.xml”,甚至可以将其加载到按帐户索引的数据库表中。 使用这种方法:http : //www.devx.com/Java/Article/30298/1954 我正在寻找做这样的事情: 问题答案: 为什么不只使用xpath? 您可

  • 问题内容: 说我有这个PHP代码: 然后,我需要一个这样的功能: 打印: 任何想法如何实现这一目标?在PHP中甚至有可能吗? 问题答案: 您可以使用get_defined_vars()来查找与您要查找其名称的变量具有相同值的变量的名称。显然,这并不总是可行的,因为不同的变量通常具有相同的值,但这是我想到的唯一方法。 编辑:get_defined_vars()似乎不能正常工作,它返回’var’,因为

  • 获取对象的类名为,使用: 返回如下内容: 我正在寻找纯版本:。我如何得到一个清理过的类名字符串呢? 我发现了一些关于这个的问题,但没有真正的答案。难道一点都不可能吗?