Django(23)Django限制请求装饰器

Django(23)Django限制请求装饰器前言有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器限制请求装饰器Django内

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器
 

限制请求装饰器

Django内置的视图装饰器可以给视图提供一些限制。比如这个视图只能通过GETmethod访问等。
django.http.decorators.http.require_http_methods装饰器方法的路径,接下来我们看下它的源码

def require_http_methods(request_method_list):
    """
    Decorator to make a view only accept particular request methods.  Usage::

        @require_http_methods(["GET", "POST"])
        def my_view(request):
            # I can assume now that only GET or POST requests make it this far
            # ...

    Note that request methods should be in uppercase.
    """
    def decorator(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            if request.method not in request_method_list:
                response = HttpResponseNotAllowed(request_method_list)
                log_response(
                    'Method Not Allowed (%s): %s', request.method, request.path,
                    response=response,
                    request=request,
                )
                return response
            return func(request, *args, **kwargs)
        return inner
    return decorator

上述装饰器的含义是如果请求方法不在request_method_list这个列表中,那么就返回HttpResponseNotAllowed405方法不允许
 
在源码中django又定义了3个属性

require_GET = require_http_methods(["GET"])
require_GET.__doc__ = "Decorator to require that a view only accepts the GET method."

require_POST = require_http_methods(["POST"])
require_POST.__doc__ = "Decorator to require that a view only accepts the POST method."

require_safe = require_http_methods(["GET", "HEAD"])
require_safe.__doc__ = "Decorator to require that a view only accepts safe methods: GET and HEAD."

上述代码django又帮助我们定义好了只允许GET方法,只允许POST方法,只允许GET和HEAD方法,了解完源码后,我们就可以开始实操了
 

实战案例

我们创建一个视图,导入装饰器,定义一个index函数,在函数上加上一个require_GET装饰器,代码如下

from django.views.decorators.http import require_http_methods, require_GET, require_POST
from django.http import HttpResponse


@require_POST  
def index(request):
    return HttpResponse('success')

接下来我们访问这个视图,可以从PyCharm的控制台清楚的看到,返回的是405

Method Not Allowed (GET): /
[21/May/2021 02:08:05] "GET / HTTP/1.1" 405 0

接下来我们使用require_http_methods方法来给大家演示,代码如下

require_http_methods(['GET'])
def index1(request):
    return HttpResponse('success')

接下来我们通过网页访问,可以看到是可以正常访问的

[21/May/2021 02:20:59] "GET / HTTP/1.1" 200 7
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165455.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月30日 下午1:00
下一篇 2022年7月30日 下午1:16


相关推荐

  • Elasticsearch教程-从入门到精通(转载)

    Elasticsearch教程-从入门到精通(转载)

    2021年11月24日
    39
  • linux管道pipe详解

    linux管道pipe详解管道管道的概念 管道是一种最基本的 IPC 机制 作用于有血缘关系的进程之间 完成数据传递 调用 pipe 系统函数即可创建一个管道 有如下特质 1 其本质是一个伪文件 实为内核缓冲区 2 由两个文件描述符引用 一个表示读端 一个表示写端 3 规定数据从管道的写端流入管道 从读端流出 管道的原理 管道实为内核使用环形队列机制 借助内核缓冲区 4k 实现 管道的局限性

    2026年3月19日
    1
  • double转bigDecimal精度问题

    double转bigDecimal精度问题double转bigDecimal精度问题需要用到bigDecimal的字符串构造来转float的精度:2^237位double的精度:2^5216位十进制转二进制存在精度差doubleg=12.35;BigDecimalbigG=newBigDecimal(g).setScale(1,BigDecimal.ROUND_HALF_UP);//…

    2022年6月4日
    166
  • java分前端后端吗_Java Web属于前端还是后端

    java分前端后端吗_Java Web属于前端还是后端JavaWeb属于前端还是后端发布时间:2020-06-1513:39:15来源:亿速云阅读:325作者:鸽子JavaWeb是前端还是后端?JavaWeb是属于后端,JavaWeb就是用Java技术开发的Web应用,而Java是一种可以编写跨平台应用软件、完全面向对象的高级程序设计语言,一般常用于后端服务器的开发和Android软件的开发。Java语言特点1、简单性Java看起来设计…

    2022年7月7日
    27
  • 根据经纬度和半径计算经纬度范围

    根据经纬度和半径计算经纬度范围nbsp nbsp paramraidus 单位米 nbsp nbsp returnminLat minLng maxLat maxLng nbsp nbsp nbsp publicstatic getAround doublelat doublelon intraidus nbsp nbsp nbsp Doublelatitu lat nbsp nbsp nbsp Doublelo

    2025年8月10日
    6
  • Regression Tree 回归树

    Regression Tree 回归树1 引言 AI 时代 机器学习算法成为了研究 应用的热点 当前 最火的两类算法莫过于神经网络算法 CNN RNN LSTM 等 与树形算法 随机森林 GBDT XGBoost 等 树形算法的基础就是决策树 决策树因其易理解 易构建 速度快的特性 被广泛应用于统计学 数据挖掘 机器学习领域 因此 对决策树的学习 是机器学习之路必不可少的一步 根据处理数据类型的不同 决策树又分为两类 分类决策树与

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号