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 13 Python
Python多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
python实现壁纸批量下载代码实例
Jan 25 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
解决pycharm界面不能显示中文的问题
May 23 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python Kmeans算法原理深入解析
Aug 23 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
Python异常类型以及处理方法汇总
Jun 05 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
MySQL相关说明
2007/01/15 PHP
php join函数应用
2011/05/04 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
js中eval详解
2012/03/30 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Django model select的多种用法详解
2019/07/16 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
Python版中国省市经纬度
2020/02/11 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
业务员岗位职责
2013/11/16 职场文书
高中生期末评语
2014/01/28 职场文书
环保倡议书100字
2014/05/15 职场文书
服务宗旨标语
2014/07/01 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
个人创业事迹材料
2014/12/30 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs