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用10行代码实现对黄色图片的检测功能
Aug 10 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Python self用法详解
Nov 28 Python
python pygame入门教程
Jun 01 Python
详解Python中的for循环
Apr 30 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
类的另类用法--数据的封装
2006/10/09 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
js 操作符实例代码
2009/10/24 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
介绍下WebSphere的安全性
2013/01/31 面试题
2015年全国爱耳日活动总结
2015/02/27 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
投标售后服务承诺书
2015/04/29 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
详解Redis集群搭建的三种方式
2021/05/31 Redis