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解析最简单的验证码
Jan 07 Python
简述Python2与Python3的不同点
Jan 21 Python
深入浅析Python中的yield关键字
Jan 24 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
Python 加密与解密小结
Dec 06 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Django上线部署之IIS的配置方法
Aug 22 Python
python3多线程知识点总结
Sep 26 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
python解压zip包中文乱码解决方法
Nov 27 Python
pytorch--之halfTensor的使用详解
May 24 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
$()JS小技巧
2007/07/21 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
Python OpenCV实现图片上输出中文
2018/01/22 Python
详解Python中的四种队列
2018/05/21 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
迟到检讨书300字
2014/02/14 职场文书
总会计师岗位职责
2014/02/19 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
情况说明书格式及范文
2019/06/24 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技