Django中QueryDict的坑

QueryDict在Django中被用来存储请求中的数据,主要是为了解决请求中一个key对应多个value的问题,具体见文档 https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.QueryDict

如果是GET请求,则request.GET就是一个包含所有query参数的QueryDict;

如果是表单提交的POST请求,request.POST就是一个包含了表单数据的QueryDict

from django.http import QueryDict
qd = QueryDict("redbull=vitamin&rain=clear")

可见,QueryDict会把所有参数值都包进一个list中。

问题来了,我们在使用第三方服务是经常需要做数据校验:基本上就是对除了签名参数的所有请求参数做MD5加密,然后再与签名参数做对比,如果两者相等,则说明数据没有经过篡改,是安全数据。

那么,回到QueryDict,我们在获取请求参数时,如果这样写

AlipayService.verify_notify(**qd)

**qd解析出来并不是我们想要的

而是

这样我们的数据校验就始终失败。

正确的方式应该是

AlipayService.verify_notify(**qd.dict())
时间: 2024-09-15 19:55:39

Django中QueryDict的坑的相关文章

Python的Django中django-userena组件的简单使用教程

  这篇文章主要介绍了Python的Django中django-userena组件的简单使用教程,包括用户登陆和注册等简单功能的实现,需要的朋友可以参考下 利用twitter/bootstrap,项目的基础模板算是顺利搞定.接下来开始处理用户中心. 用户中心主要包括用户登陆.注册以及头像等个人信息维护.此前,用户的注册管理我一直使用django-registration.只是这个APP有些不思进取,09年发布了0.8alpha版后就一直没什么动静.这次决定尝试另外一个用户模块组件django-u

Django中使用group

本文实例讲述了Django中使用group_by的方法.分享给大家供大家参考.具体分析如下: 在Django中怎样使用group_by语句呢?找了很多资料,都没有看到好的,在这里分享两种方法给大家: 首先,我们先建一个简单的模型. ? 1 2 3 4 5 class Book(models.Model): name = models.CharField(u'书名',max_length=255,db_index = True) author = models.CharField(u'作者',ma

Django中实现点击图片链接强制直接下载的方法

  本文实例讲述了Django中实现点击图片链接强制直接下载的方法.分享给大家供大家参考.具体分析如下: 当用户点击图片连接时,默认为在浏览器中直接开打图片,这段代码可以让图片链接变成下载 这段代码也非常适合下载大文件,基本不会消耗内存,每次只读取一部分数据到内存,然后提供下载 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def Download(request): def readFile(fn, buf_size=262144): f = open

Django中几种重定向方法

  这篇文章主要介绍了Django中几种重定向方法,本文讲解了使用HttpResponseRedirect.redirect.reverse以及配置文件中配置URL等方法,需要的朋友可以参考下 这里使用的是django1.5 需求: 有一个界面A,其中有一个form B, 前台提交B之后,后台保存数据之后,返回界面A,如果保存失败需要在A界面提示错误. 这里就需要后台的重定向,而且需要可以带着参数,也就是error message 这里收集了几种方法,简答说下需要那些包,怎么简单使用. 一. 使

整理iOS9适配中出现的坑(图文)

整理iOS9适配中出现的坑(图文) 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着有用户陆续升级iOS9,也就逐渐的衍生出了一系列的问题,笔者也在赶忙为自己维护的App做适配,本文写的一些坑基本都是亲身体验了. 一.NSAppTransportSecurity iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输

django中使用jquery ajax post数据出现403错误的解决办法(两种方法)_AJAX相关

在django中,使用jquery ajax post数据,会出现403的错误 方法一: 如果用jQuery来处理ajax的话,Django直接送了一段解决问题的代码.把它放在一个独立的js文件中,在html页面中都引入即可.注意这个js文件必须在jquery的js文件引入之后,再引入即可 $(document).ajaxSend(function(event, xhr, settings) { function getCookie(name) { var cookieValue = null;

Django中的模型

Django 中的模型主要用于定义数据的来源信息,其包括一些必要的字段和一些对存储的数据的操作.通常,一个模型对应着数据库中的一个表. 简单的概念: Django 中每一个 Model 都继承自 django.db.models.Model. 在 Model 当中每一个属性 attribute 都代表一个数据库字段. 通过 Django Model API 可以执行数据库的增删改查, 而不需要写一些数据库的查询语句. 1. 模型 1.1 一个示例 下面在 myapp 应用种定义了一个 Perso

Django中的模板

通过<如何创建一个Django网站>大概清楚了如何创建一个简单的 Django 网站,这篇文章主要是在此基础上介绍 Django 中模板相关的用法. 视图中使用模板 在<如何创建一个Django网站>中使用模板的方式如下: from django.http import HttpResponse from django.template import RequestContext, loader from polls.models import Question def index

nginx+uwsgi+django中的uwsgi.ini配置问题

问题描述 nginx+uwsgi+django中的uwsgi.ini配置问题 最近配置了nginx+uwsgi+django,其中项目目录下我新建了uwsgi.ini配置文件 [uwsgi] socket = 127.0.0.1:8088 master = true pidfile = /tmp/uwsgi.pid processes = 8 chdir = /home/test daemonize=/home/log/uwsgi.log module = test.wsgi:applicati