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/165037.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)

    【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)目录一、Java概述1.何为编程2.什么是Java3.jdk1.5之后的三大版本4.Jdk和Jre和JVM的区别5.什么是跨平台性?原理是什么6.Java语言有哪些特点7.什么是字节码?采用字节码的最大好处是什么8.什么是Java程序的主类?应用程序和小程序的主类有何不同?9.Java应用程序与小程序之间有那些差别?10.Java和C++的区别11.OracleJDK和OpenJDK的对比二、基础语法数据类型12.Java有哪些数据类型13.switch是否能作用在by

    2022年9月20日
    3
  • POJ 3630 Phone List

    POJ 3630 Phone List

    2022年1月18日
    63
  • 优先队列的数据结构_低优先级队列一天只能一场

    优先队列的数据结构_低优先级队列一天只能一场目录一.PriorityQueuePriorityQueue简介继承关系PriorityQueue示例二.Comparable比较器Compara接口三.Comparator比较器Comparator接口四.底层原理一.PriorityQueuePriorityQueue简介PriorityQueue,即优先级队列。优先级队列可以保证每次取出来的元素都是队列中的最小或最大的元素<Java优先级队列默认每次取出来的为最小元素&gt.

    2022年9月23日
    2
  • Java 随机数

    Java 随机数本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。广义上讲,Java中的随机数的有三种产生方式:(01).通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。(02).通过Math.random()返回一个0到1之间的double值。(03).通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。…

    2022年7月26日
    4
  • 2基本放大电路_基本放大电路详解

    2基本放大电路_基本放大电路详解基本放大电路

    2022年8月5日
    6
  • hackbar2.2.9在Firefox中的安装

    hackbar2.2.9在Firefox中的安装转载出处:https://www.ddosi.com/b320/尊重原创,以及知识产权,首先声明这是上面链接中大神的辛苦劳动成果,因为不知道如果联系所以这篇转载可能会有侵权问题,希望查看此链接的爱好者直接点击上面的链接查看,这篇仅是个人学习转载。前言众所周知,Firefox的插件必须经过签名,才能加载到浏览器中.因此,对于hackbar的破解,要么是装2.1.3这个没有激活的老版本,要么是直接安装hackbar的替代品,如Machackbar……其实对于h.

    2022年5月15日
    76

发表回复

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

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