如何从request.POST di获取布尔值

2024-05-20 01:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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'}

但是这些值应该是布尔值,因为它们是从HTML页面的单选按钮呈现的。

我想把这个request.POST.dict()转换成一个简单的python dict,它将具有pythonic值,比如for 'true'/'false' ==> True/False.

注意:我不想使用apply for循环,因为这可能会影响性能,因为这会影响到大量数据。


Tags: djangofalsetruefor参数isaddressrequest
3条回答

阅读完这些注释后,按照您的方式(不使用Django表单,接受来自第三方web应用程序的POST请求,并选择将输入序列化为u"true"u"false"),您除了在POST字典键上循环并在python中将字符串手动转换为bools之外别无选择。如果这真的对性能有那么大的影响,那么也许是时候重新考虑你的方法了。

出于好奇,谁在设计你接受并连载的表格?你是在连续剧还是在连续剧?你在安全方面做了什么?”“通用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

django怎么知道这些问题是单选按钮输入的?对于Django来说是一样的,因为其他表单输入答案都是以文本格式发送的。

将这些值转换为正确数据类型的正确方法是通过Django表单。你为你想要的答案创建一个表单,当它是“干净的”ed时,它将是正确的格式。签出Django's own forms documentation

你应该有这样的东西:

   form = MyForm(request.POST)
   if form.is_valid():
         status = form.cleaned_data['sam_status']

请注意,后台的django表单将执行您所说的操作,它将基本上遍历数据并根据表单定义对其进行规范化。但即使是在很大的时候,也不会造成太大的性能问题。如果速度很慢,我建议您检查其他代码的性能瓶颈。

为什么不在发布数据时用JSON对其进行编码?像这样:

$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
});

然后,如果在Django中解码响应体,一切都会好的:

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

相关问题 更多 >