Django如何简单快速实现PUT、DELETE方法


Posted in Python onJuly 24, 2019

使用django的小伙伴们应该都知道我们是无法开心的处理PUT跟DELETE的

$.ajax({
  url: 'XXX',
  type: 'PUT',
  dataType: 'json',
  data: {
    's': $("#select-id").find("option:selected").text()
  },
  success: function (data) {
    console.log('ok');
  }
})
def func(request):
  if request.method == 'GET':
    s = request.GET.get('s', None)
    return XXX
  elif request.method == 'POST':
    s = request.POST.get('s', None)
    return XXX
  elif request.method == 'PUT':
    s = request.PUT.get('s', None)          # 我们希望愉快的获取继续处理
    return XXX
  elif request.method == 'DELETE':
    s = request.DELETE.get('s', None)        # 我们希望愉快的获取继续处理
    return XXX
  else:
    pass

很不幸,在默认情况下,我们不能很轻易的根据restful来写url,但是,懒癌的威力是无穷大的!机智的小北方通过查阅资料以及自定义修改实现了使用中间件来达成次目的

首先我们需要在django里某个app下添加一个中间件py文件,命名随意,这里我叫middleware

#!/usr/bin/env python
# -*- coding:utf8 -*-
# __author__ = '北方姆Q'

from django.http import QueryDict
try:
  from django.utils.deprecation import MiddlewareMixin  # 1.10.x
except ImportError:
  MiddlewareMixin = object                # 1.4.x-1.9.x


class HttpPost2HttpOtherMiddleware(MiddlewareMixin):
  def process_request(self, request):
    """
    可以继续添加HEAD、PATCH、OPTIONS以及自定义方法
    HTTP_X_METHODOVERRIDE貌似是以前版本的key???
    :param request: 经过原生中间件处理过后的请求
    :return:
    """
    try:
      http_method = request.META['REQUEST_METHOD']
      if http_method.upper() not in ('GET', 'POST'):
        setattr(request, http_method.upper(), QueryDict(request.body))
    # except KeyError:
    #   http_method = request.META['HTTP_X_METHODOVERRIDE']
    #   if http_method.upper() not in ('GET', 'POST'):
    #     setattr(request, http_method.upper(), QueryDict(request.body))
    except Exception:
      pass
    finally:
      return None

然后在django的settings里注册此中间件就好了

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'yourappname.middleware.HttpPost2HttpOtherMiddleware',              # 改成自己的app名称哦
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python批量修改文件后缀示例代码分享
Dec 24 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
python实时监控cpu小工具
Jun 21 Python
python之文件读取一行一行的方法
Jul 12 Python
django缓存配置的几种方法详解
Jul 16 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
TensorFlow tf.nn.max_pool实现池化操作方式
Jan 04 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
执行Python程序时模块报错问题
Mar 26 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
django一对多模型以及如何在前端实现详解
Jul 24 #Python
详解Python是如何实现issubclass的
Jul 24 #Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 #Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 #Python
Django 创建/删除用户的示例代码
Jul 24 #Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 #Python
简单了解python 邮件模块的使用方法
Jul 24 #Python
You might like
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
python命令行参数用法实例分析
2019/06/25 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
python字符串下标与切片及使用方法
2020/02/13 Python
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
介绍一下mysql的日期和时间函数
2013/03/28 面试题
学校大课间活动方案
2014/01/30 职场文书
世博会口号
2014/06/20 职场文书
2015新学期家长寄语
2015/02/26 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis