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中日期和时间格式化输出的方法小结
Mar 19 Python
解析Python中的二进制位运算符
May 13 Python
python自动zip压缩目录的方法
Jun 28 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Python内置函数property()如何使用
Sep 01 Python
python selenium 获取接口数据的实现
Dec 07 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
python实现层次聚类的方法
Nov 01 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
Dec 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
解析php如何将日志写进syslog
2013/06/28 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
jsonp原理及使用
2013/10/28 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
《新型玻璃》教学反思
2014/04/13 职场文书
体育之星事迹材料
2014/05/11 职场文书
单位授权委托书范本
2014/09/26 职场文书
绿色校园广播稿
2014/10/13 职场文书
教师考核鉴定意见
2015/06/05 职场文书
python 网络编程要点总结
2021/06/18 Python