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使用百度API上传文件到百度网盘代码分享
Nov 08 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
pandas实现选取特定索引的行
Apr 20 Python
Python解析Excle文件中的数据方法
Oct 23 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
浅析python中while循环和for循环
Nov 19 Python
Python-openCV开运算实例
Jul 05 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
在python中读取和写入CSV文件详情
Jun 28 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
生成sessionid和随机密码的例子
2006/10/09 PHP
用php+mysql一个名片库程序
2006/10/09 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
php 常用的系统函数
2017/02/07 PHP
用ADODB.Stream转换
2007/01/22 Javascript
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
ng-zorro-antd 入门初体验
2018/12/03 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
python 合并文件的具体实例
2013/08/08 Python
python fabric实现远程部署
2017/01/05 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Django的models中on_delete参数详解
2019/07/16 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
保安员岗位职责
2013/11/17 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
亮化工程实施方案
2014/03/17 职场文书
学雷锋月活动总结
2014/04/25 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
建设工程授权委托书
2014/09/22 职场文书
考试后的感想
2015/08/07 职场文书
导游词之襄阳古城
2019/09/27 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python