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中随机函数random用法实例
Apr 30 Python
Pycharm学习教程(2) 代码风格
May 02 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
Python中使用支持向量机SVM实践
Dec 27 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
python两种注释用法的示例
Oct 09 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
python requests模块的使用示例
Apr 07 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
Python使用plotly绘制数据图表的方法
2017/07/18 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
学生思想表现的评语
2014/01/30 职场文书
民生工程实施方案
2014/03/22 职场文书
女生节标语
2014/06/26 职场文书
运动会开幕词
2015/01/28 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript