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生成器的使用方法
Nov 21 Python
Python实现在线音乐播放器
Mar 03 Python
python实现xlsx文件分析详解
Jan 02 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
pytorch进行上采样的种类实例
Feb 18 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
Python爬取豆瓣数据实现过程解析
Oct 27 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
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
跨浏览器的事件对象介绍
2012/06/27 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
js点击选择文本的方法
2015/02/09 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
Python开发的实用计算器完整实例
2017/05/10 Python
python安装教程
2018/02/28 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
Python 加密与解密小结
2018/12/06 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
你常见到的runtime exception
2016/09/05 面试题
剪彩仪式主持词
2014/03/19 职场文书
自荐信格式范文
2015/03/04 职场文书
2015年保送生自荐信
2015/03/24 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
初中体育课教学反思
2016/02/16 职场文书
Linux磁盘管理方法介绍
2022/06/01 Servers
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers