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 11 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python基于有道实现英汉字典功能
Jul 25 Python
python的re正则表达式实例代码
Jan 24 Python
理论讲解python多进程并发编程
Feb 09 Python
Python3多线程基础知识点
Feb 19 Python
django创建超级用户过程解析
Sep 18 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php绘制一个扇形的方法
2015/01/24 PHP
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
React实现评论的添加和删除
2020/10/20 Javascript
在django中使用自定义标签实现分页功能
2017/07/04 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
keras导入weights方式
2020/06/12 Python
python 利用toapi库自动生成api
2020/10/19 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
香港士多网上超级市场:Ztore
2021/01/09 全球购物
自荐信模版
2013/10/24 职场文书
模范教师事迹材料
2014/02/10 职场文书
体育节口号
2014/06/19 职场文书
专科生就业求职信
2014/06/22 职场文书
毕业设计论文评语
2014/12/31 职场文书
加薪通知
2015/04/25 职场文书
2015年语言文字工作总结
2015/07/23 职场文书