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中的__init__和__new__
Mar 12 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
Django中使用group_by的方法
May 26 Python
Python生成器以及应用实例解析
Feb 08 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
Python入门必须知道的11个知识点
Mar 21 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
Python中的xlrd模块使用原理解析
May 21 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
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
yii添删改查实例
2015/11/16 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
Python多线程爬虫简单示例
2016/03/04 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python中取绝对值简单方法总结
2020/07/24 Python
Python 在局部变量域中执行代码
2020/08/07 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
节约电力资源的建议书
2014/03/12 职场文书
协议书范本
2014/04/23 职场文书
给公司的建议书范文
2014/05/13 职场文书
党员自我评价2015
2015/03/03 职场文书