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抓取京东商城手机列表url实例代码
Dec 18 Python
Python3基础之基本运算符概述
Aug 13 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
python2.7实现FTP文件下载功能
Apr 15 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python新手学习装饰器
Jun 04 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 传值赋值与引用赋值的区别
2010/12/29 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
Seajs的学习笔记
2014/03/04 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Django中URL的参数传递的实现
2019/08/04 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
介绍一下RMI的基本概念
2016/12/17 面试题
写好自荐信的技巧
2013/11/08 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
小学校园广播稿
2015/08/18 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers