Cra*_*eek 4 python django dictionary
我正在使用django 1.4,并且收到了request.POST.dict()包含所有值都转换为Unicode格式的参数。如
{u'sam_status': u'true', u'address_type': u'false', u'is_deleted': u'false', u'title': u'true'}
Run Code Online (Sandbox Code Playgroud)
但是这些值应该是布尔值,因为它们是从HTML页面的单选按钮呈现的。
我想将其转换request.POST.dict()为简单的python dict,它将具有pythonic值,例如'true'/'false' ==> True/False.
注意:我不想申请循环,因为这可能会影响性能,因为它适用于海量数据。
阅读注释后,您的操作方式(不使用Django表单,接受来自第三方Web应用程序的POST请求并选择将输入序列化为u"true"和u"false")您别无选择,只能遍历POST字典键并转换字符串在python中手动布尔。如果确实对性能有很大影响,那么可能是时候重新考虑您的方法了。
出于好奇,谁在设计您要接受并序列化的表格?您是否还在进行序列化?您在安全方面在做什么?“通用REST API模型表单提交”和“第三方Web应用程序”听起来像是灾难的配方。
编辑:请不要eval()用来转换u"False"成False
>>> for key, value in request.POST.items():
... if value == u'true':
... a[key] = True
... if value == u'false':
... a[key] = False
Run Code Online (Sandbox Code Playgroud)
django 如何知道这些问题是单选按钮输入?对于 Django 来说都是一样的,因为其他表单输入答案都是以文本格式发送的。
将这些值转换为正确数据类型的正确方法是通过 Django 表单。您为您想要的答案创建一个表格,当它“干净”时,它将采用正确的格式。查看Django 自己的表单文档。
你应该有类似的东西:
form = MyForm(request.POST)
if form.is_valid():
status = form.cleaned_data['sam_status']
Run Code Online (Sandbox Code Playgroud)
请注意,后台的 django 表单将执行您所说的操作,它基本上会遍历数据并根据表单定义对它们进行规范化。但即使表单非常大,也不应该造成太大的性能问题。如果它非常慢,我建议您检查其他代码是否存在性能瓶颈。