django 如何从request.POST dict获取布尔值

20jt8wwn  于 2023-08-08  发布在  Go
关注(0)|答案(4)|浏览(141)

我使用的是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()转换成一个简单的pythondict,它将有pythonic值,比如'true'/'false' ==> True/False.
注意:我不想使用apply for循环,因为这可能会影响性能,因为它适用于庞大的数据。

hkmswyz6

hkmswyz61#

阅读了评论后,你的做法(不使用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

字符串

tcomlyy6

tcomlyy62#

django怎么知道这些问题是单选按钮输入的?Django也是一样的,因为其他表单输入的答案都是以文本格式发送的。
将这些值转换为正确的数据类型的正确方法是通过Django表单。你创建一个表格,你想要的答案,当它是“干净”艾德,它将在正确的格式。查看Django's own forms documentation
你应该有这样的东西:

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

字符串
请注意,后台的django表单会做你所说的,它基本上会遍历数据并根据表单定义对它们进行规范化。但即使表单非常大,它也不会造成太大的性能问题。如果速度非常慢,我建议您检查其他代码是否存在性能瓶颈。

xtfmy6hx

xtfmy6hx3#

bool_dict = {'true': True, 'false': False, 'True': True, 'False': False}
bool_value = bool_dict.get(request.POST.get('bool_value', 'false'), False)

字符串

w9apscun

w9apscun4#

你为什么不在发布数据的时候用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'))

相关问题