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 相关文章推荐
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
Python3.6正式版新特性预览
Dec 15 Python
python中kmeans聚类实现代码
Feb 23 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
python分割一个文本为多个文本的方法
Jul 22 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
详解Django CAS 解决方案
Oct 30 Python
python反转列表的三种方式解析
Nov 08 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 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循环中使用引用的问题
2013/11/06 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python collections模块实例讲解
2014/04/07 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Python selenium爬虫实现定时任务过程解析
2020/06/08 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
市三好学生主要事迹
2014/01/28 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
诚信贷款承诺书
2014/05/30 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python