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访问纯真IP数据库的代码
May 19 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
python实现音乐下载的统计
Jun 20 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
详解python中list的使用
Mar 15 Python
python 实现识别图片上的数字
Jul 30 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
python的flask框架难学吗
Jul 31 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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 print类函数使用总结
2010/06/25 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php异常处理使用示例
2014/02/25 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
IE下JS读取xml文件示例代码
2013/08/05 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
Django 重写用户模型的实现
2019/07/29 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
python 求10个数的平均数实例
2019/12/16 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
详解rem 适配布局
2018/10/31 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
高中数学教师求职信
2013/10/30 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
Python时间操作之pytz模块使用详解
2022/06/14 Python