Django接受前端数据的几种方法总结


Posted in Python onNovember 04, 2016

背景

测试工具箱写到一半,今天遇到了一个前后端数据交互的问题,就一起做一下整理。

环境

--------------------------------------------------------

版本相关

操作系统:Mac OS X EI Caption

Python版本:2.7

IDE:PyCharm

Django: 1.8.2

---------------------------------------------------------

注: 我测试的是Get方法,POST方法也同样适用

字符型

字符型的数据相对好获取,前端传递的方法如下:

sendData = {
  "exporttype": exporttype,

  "bugids": bugids,

  "test": JSON.stringify({"test": "test"})

};

在Django的后端只要使用exporttype = request.GET.get("exporttype")

就能正常的获取到这个数据了。

注意: 在Python2.7中数据是unicode编码的,如果要使用,有时候需要进行转str

结果示例:

Excle <type 'unicode'>

数组型

获取数组型的数据如果使用获取字符串的数据的方法,打出的结果是None。我们要使用这个方法:

bugids = request.GET.getlist("bugids[]")

这样获取的数据就是数组类型。

注意: 获取的数组中的元素是unicode编码的,在某些时候使用需要转编码

结果示例:

•传递的url

[14/Jul/2016 11:00:41]"GET /testtools/exportbug/?exporttype=Excle&bugids%5B%5D=102&bugids%5B%5D=101&bugids%5B%5D

•获取的数据

[u'102', u'101', u'100', u'99', u'98', u'97', u'96', u'95', u'94', u'93', u'92', u'91', u'90', u'89', u'88', u'87'

字典型

字典型数据其实可以当成字符串数据来处理,获取到对应字符串后使用JSON模块做一下格式化就行了。

对于前端来说,传递字典型的数据就是传递JSON数据,所以使用的方法是:

"test": JSON.stringify({"test": "test"})

结果示例:

{"test":"test"} <type 'unicode'>

相关源码

•Get方法

Get方法是wsgi里面的一个方法。

def GET(self):
    # The WSGI spec says 'QUERY_STRING' may be absent.
    raw_query_string = get_bytes_from_wsgi(self.environ, 'QUERY_STRING', '')
    return http.QueryDict(raw_query_string, encoding=self._encoding)

最终返回的是一个http.QueryDict(raw_query_string, encoding=self._encoding)http的原始数据,而QueryDict继承于MultiValueDict ,所以我们直接看MultiValueDict就好了。

•MultiValueDict

其实源码看起来并不难。

def get(self, key, default=None):
    """
    Returns the last data value for the passed key. If key doesn't exist
    or value is an empty list, then default is returned.
    """
    try:
      val = self[key]
    except KeyError:
      return default
    if val == []:
      return default
    return val

  def getlist(self, key, default=None):
    """
    Returns the list of values for the passed key. If key doesn't exist,
    then a default value is returned.
    """
    try:
      return super(MultiValueDict, self).__getitem__(key)
    except KeyError:
      if default is None:
        return []
      return default

  def __getitem__(self, key):
    """
    Returns the last data value for this key, or [] if it's an empty list;
    raises KeyError if not found.
    """
    try:
      list_ = super(MultiValueDict, self).__getitem__(key)
    except KeyError:
      raise MultiValueDictKeyError(repr(key))
    try:
      return list_[-1]
    except IndexError:
      return []

getlist方法也就是把数据全部整合一下,返回回来。

以上这篇Django接受前端数据的几种方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现井字棋游戏
Mar 30 Python
浅谈Python数据类型之间的转换
Jun 08 Python
python操作 hbase 数据的方法
Dec 18 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python连接Redis的基本配置方法
Sep 13 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
python线程中的同步问题及解决方法
Aug 29 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 #Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 #Python
浅谈python字典多键值及重复键值的使用
Nov 04 #Python
用Python将动态GIF图片倒放播放的方法
Nov 02 #Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 #Python
Python实现简单的四则运算计算器
Nov 02 #Python
利用Python命令行传递实例化对象的方法
Nov 02 #Python
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
文件上传程序的全部源码
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
Python读写ini文件的方法
2015/05/28 Python
python中返回矩阵的行列方法
2018/04/04 Python
python爬取个性签名的方法
2018/06/17 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
应用英语专业自荐信
2014/01/26 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
毕业生个人总结
2015/02/28 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
导游词之无锡梅园
2019/11/28 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏