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 相关文章推荐
Python3 能振兴 Python的原因分析
Nov 28 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
python pandas 时间日期的处理实现
Jul 30 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
python中JWT用户认证的实现
May 18 Python
pytorch SENet实现案例
Jun 24 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
python Zmail模块简介与使用示例
Dec 19 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下通过POST还是GET来传值
2008/06/05 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
广州品高软件.net笔面试题目
2012/04/18 面试题
GC是什么?为什么要有GC?
2013/12/08 面试题
大学新生军训自我鉴定范文
2014/09/13 职场文书
旷课检讨书范文
2014/10/30 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
请客吃饭开场白
2015/06/01 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python
前端JavaScript大管家 package.json
2021/11/02 Javascript
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫