Django框架在进行路由分发时,完全依赖于用户请求的URL,并没有考虑请求所使用 的HTTP方法。这意味着对同一个URL使用不同的HTTP方法发起请求,都将路由到同一 个视图函数被处理。

在下图的示例中,用户向URL/report/1234/使用不同的HTTP方法,发起了四次请求, 都将被Django路由到视图v_report()进行处理:

装饰器:require_http_method()

当然你可以在视图函数内丢弃那些期望之外的请求(比如上例中的POST /report/1234/), 但更简单的做法是使用Django预置的require_http_methods(methods)装饰器进行限制, 让框架帮你拦截那些不想要的请求。

例如,下面的示例声明了视图函数v_login()只支持GET和POST方法:

from django.views.decorators.http import require_http_methods
@require_http_methods(['GET','POST'])
def v_login(request):pass

这时,如果用户试图使用其他HTTP方法(比如DELETE)请求指向这个视图函数的URL, Django框架将自动拦截并返回405错误 —— 在HTTP协议中,405代码表示:请求的方法 不被允许。

装饰器的语法糖

有几个语法糖可以缩短require_http_method()这个装饰器的书写长度:

require_GET() - 声明被装饰的视图仅支持GET方法
require_POST() - 声明被装饰的视图仅支持POST方法
require_SAFE() - 声明被装饰的视图仅支持GET和HEAD方法

例如,下面的示例声明了视图函数v_index()仅支持HTTP GET方法:

@require_GET
def v_index(request):pass

限制 != 分发 :请不要错误地认为这个装饰器可以指示Django框架将使用不同 HTTP方法向同一URL发起的请求自动路由到不同的视图函数,Django做不 到这一点,你必须在视图内自行实现不同HTTP方法的分发。

django限制HTTP请求方式相关推荐

  1. Django视图层:URL调度器、Django处理一个请求、URLconf在查找什么?URL:①path()路径、②路径转换器Path converter、③正则表达式组re_path()

    一.视图层The view layer Django 具有 "视图" 的概念,负责处理用户的请求并返回响应. 二.URL调度器URL dispatcher urlpattern:U ...

  2. django 接收ajax请求

    原文:http://qindongliang.iteye.com/blog/2147336 Ajax的出现让Web展现了更新的活力,基本所有的语言,都动态支持Ajax与起服务端进行通信,并在页面实现无 ...

  3. 【Django】项目中调用深度学习模型model.predict()(Django两种启动方式runserver和uwsgi的区别)

    目录 问题 测试 解决方法 Django两种启动方式runserver和uwsgi的区别 问题 部署含有深度学习模型的Django项目的uWSGI.Nginx服务器的时候,所有模块都可以正常运行,也可 ...

  4. unity3d 切换网络_Unity3d新网络请求方式UnityWebRequest详解

    Unity将要逐步放弃www网络请求api,新的api请求方式来临:UnityWebRequestThe,也正是本篇文章要给大家介绍的重点,那就是UnityWebRequestThe的使用详解. 旧的 ...

  5. android 请求方式有哪些,Android中的几种网络请求方式详解

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面整理四种常用网络请求方式. java.net包中的HttpURLConnection类 Get方式: // Get方式请求 ...

  6. php 请求方式,PHP发起HTTP请求有哪几种方式?

    PHP发起HTTP请求方式有:1.通过[file_get_contents]发送get请求:2.通过[CURL]发送get请求:3.通过[fsocket]发送get请求. PHP发起HTTP请求方式有 ...

  7. 轻松搞定Retrofit不同网络请求方式的请求参数配置,及常用注解使用

    <一>四种请求方式: GET 向服务器发起数据请求,获取信息.类似于数据库的select操作,只是查询,不会影响资源的内容. POST 向服务器发送数据,该请求会改变数据的种类等资源.类似 ...

  8. 以ajax请求方式进行文件下载操作失败的原因及解决方案

    以ajax请求方式进行文件下载操作失败的原因及解决方案 参考文章: (1)以ajax请求方式进行文件下载操作失败的原因及解决方案 (2)https://www.cnblogs.com/sjshare/ ...

  9. SpringCloud中Feign服务调用请求方式及参数总结

    前言 最近做微服务架构的项目,在用feign来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录.以下通过分为三种情况说 ...

最新文章

  1. 给力的 Google HTML5 训练营(HTML5 DragDrop 拖拽、FileRea...
  2. mysql 主从同步 工具_mysql主从同步工具maatkit安装
  3. python函数对变量的作用域_python函数变量作用域如何理解使用?
  4. java list 自定义类型转换_使用Java Stream API将List按自定义分组规则转换成Map的一个例子...
  5. Dom4j解析Xml文件,Dom4j创建Xml文件
  6. 梯度下降和导数的作用
  7. word2vec中的数学模型
  8. HDU 5895 Mathematician QSC
  9. gitz之忽略warning:LF will be replaced by CRLF
  10. AMD劲升6% 业界分析师看好其服务器芯片Ebyc
  11. tomcat 设置session过期时间(四种方式)
  12. 基于Halcon学习的二维码识别【六】pdf417_bottle.hdev
  13. ETL(SSIS)组件使用
  14. stm32连接热敏打印机
  15. 2022“杭电杯”中国大学生算法设计超级联赛(7) 2022杭电多校第七场
  16. Wildcard Matching 1
  17. XMind8思维导图 破解版
  18. memory management 蓝屏win10,要怎么解决这个蓝屏问题
  19. 知网下载的PDF论文,如何加目录的方法
  20. 关于数组的引用和引用的数组

热门文章

  1. 如何学好C++,用好类库很重要
  2. 紫光同创国产FPGA学习之了解器件和软件
  3. Python网络爬虫实例1:股票数据定向爬虫
  4. java.sql.SQLException: Statement.executeQuery() cannot issue statements that do not produce result
  5. 豆瓣以及豆瓣的衍生品
  6. 计算机丢失msidcr,苹果电脑崩溃导致数据丢失?Aiseesoft Data Recovery为您恢复丢失数据...
  7. Python爬虫——爬取搜狗影视热门电视剧!无聊就追剧吧!
  8. 2014 计算机基础综合,2014计算机基础综合应用 .doc
  9. 【卫星影像三维重建】相关文献及资源
  10. ArcGIS:(模型构建器)如何获取各个区域下不同地物的面积?