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 相关文章推荐
神经网络(BP)算法Python实现及应用
Apr 16 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
python数据类型强制转换实例详解
Jun 22 Python
Python 防止死锁的方法
Jul 29 Python
python 深度学习中的4种激活函数
Sep 18 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
python实现高效的遗传算法
Apr 07 Python
python调试工具Birdseye的使用教程
May 25 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(2)
2006/10/09 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php依赖注入知识点详解
2019/09/23 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
使用js画图之饼图
2015/01/12 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
layui表格实现代码
2017/05/20 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
JS实现前端缓存的方法
2017/09/21 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
会计专业大学生求职信范文
2014/01/28 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
三峡导游词
2015/01/31 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
Python实现归一化算法详情
2022/03/18 Python