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的线程来解决生产者消费问题的示例
Apr 02 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
python中的格式化输出用法总结
Jul 28 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
python实现移位加密和解密
Mar 22 Python
Python向excel中写入数据的方法
May 05 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
Python WSGI 规范简介
Apr 11 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实现生成唯一会员卡号
2015/08/24 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
jquery选择器使用详解
2014/04/08 Javascript
nodejs教程之入门
2014/11/21 NodeJs
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
keras之权重初始化方式
2020/05/21 Python
Python是如何进行类型转换的
2013/06/09 面试题
绘画设计学生的个人自我评价
2013/09/20 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
教师年度考核个人总结
2015/02/12 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
Pygame Rect区域位置的使用(图文)
2021/11/17 Python