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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
机器学习python实战之决策树
Nov 01 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
Python3字符串encode与decode的讲解
Apr 02 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
flask开启多线程的具体方法
Aug 02 Python
python实现人工蜂群算法
Sep 18 Python
Django正则URL匹配实现流程解析
Nov 13 Python
Python requests用法和django后台处理详解
Mar 19 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
thinkphp如何获取客户端IP
2015/11/03 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
js中的string.format函数代码
2020/08/11 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
python利用beautifulSoup实现爬虫
2014/09/29 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
大门门卫岗位职责
2013/11/30 职场文书
会计专业毕业生自荐信范文
2013/12/20 职场文书
教师自我鉴定范文
2014/03/20 职场文书
竞聘书格式及范文
2014/03/31 职场文书
会计岗位说明书
2014/07/29 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
apache ftpserver搭建ftp服务器
2022/05/20 Servers
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android