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 基础学习教程
Feb 08 Python
下载安装setuptool和pip linux安装pip    
Jan 24 Python
用Eclipse写python程序
Feb 10 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python collections模块的使用
Oct 16 Python
Python读取pdf表格写入excel的方法
Jan 22 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
php微信支付接口开发程序
2016/08/02 PHP
PHP7 list() 函数修改
2021/03/09 PHP
用javascript实现点击链接弹出"图片另存为"而不是直接打开
2007/08/15 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python random模块的使用示例
2020/10/10 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
专科应届生求职信
2013/11/24 职场文书
致400米运动员广播稿
2014/02/07 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
团员个人年度总结
2015/02/26 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
实现一个简单得数据响应系统
2021/11/11 Javascript