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 10 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
Windows下python3.6.4安装教程
Jul 31 Python
python 3.6.5 安装配置方法图文教程
Sep 18 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
python上传时包含boundary时的解决方法
Apr 08 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
python_tkinter弹出对话框创建
Mar 20 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中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
Python异常的检测和处理方法
2018/10/26 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
详解Python多线程下的list
2020/07/03 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
新电JAVA笔试题目
2014/08/31 面试题
程序员岗位职责
2013/11/11 职场文书
团代会宣传工作方案
2014/05/08 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
大二学年个人总结
2015/03/03 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书