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常见文件操作的函数示例代码
Nov 15 Python
Python map和reduce函数用法示例
Feb 26 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
单链表反转python实现代码示例
Feb 08 Python
python 重命名轴索引的方法
Nov 10 Python
Python 多维List创建的问题小结
Jan 18 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 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绘制饼状图的实现代码
2013/06/07 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
PHP chop()函数讲解
2019/02/11 PHP
5 cool javascript apps
2007/03/24 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
毕业生求职简历中的自我评价
2013/10/18 职场文书
给校长的建议书600字
2014/05/15 职场文书
股份合作协议书
2014/09/10 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
护士求职自荐信
2015/03/25 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书