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翻译软件实现代码(使用google api完成)
Nov 26 Python
Python实现购物程序思路及代码
Jul 24 Python
Python编程实现正则删除命令功能
Aug 30 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
pygame实现简易飞机大战
Sep 11 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
如何理解python面向对象编程
Jun 01 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
pytorch 实现多个Dataloader同时训练
May 29 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中加session验证)
2012/08/22 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
PDO::getAttribute讲解
2019/01/28 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
Python之指数与E记法的区别详解
2019/11/21 Python
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
公务员个人考察材料
2014/12/23 职场文书
白鹤梁导游词
2015/02/06 职场文书
爱心捐书倡议书
2015/04/27 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
详解Python类和对象内容
2021/06/22 Python
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js