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 21 Python
python从ftp下载数据保存实例
Nov 20 Python
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python基于有道实现英汉字典功能
Jul 25 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
对python使用http、https代理的实例讲解
May 07 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
pandas数据处理进阶详解
Oct 11 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
python常见的占位符总结及用法
Jul 02 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获取表单textarea数据中的换行问题
2010/09/10 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
php和nginx交互实例讲解
2019/09/24 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
js实现表格字段排序
2014/02/19 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
python提取xml里面的链接源码详解
2019/10/15 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
中学生期末评语
2014/02/03 职场文书
优秀班组长事迹
2014/05/31 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
关于分班的感言
2015/08/04 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
详解Python为什么不用设计模式
2021/06/24 Python