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群发邮件实例代码
Jan 03 Python
Python中的CURL PycURL使用例子
Jun 01 Python
详解Python中with语句的用法
Apr 15 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
详解Python正则表达式re模块
Mar 19 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python剪切视频与合并视频的实现
Mar 03 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
Python中的pprint模块
Nov 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程序中使用Rust扩展的方法
2015/07/03 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
PHP实现倒计时功能
2020/11/16 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
2014年社区学雷锋活动总结
2014/03/09 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server