前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django require_http_methods、require_GET、require_POST、require_safe

django require_http_methods、require_GET、require_POST、require_safe

作者头像
卓越笔记
发布2023-02-18 13:54:20
8760
发布2023-02-18 13:54:20
举报
文章被收录于专栏:卓越笔记

源码路径

..\Lib\site-packages\django\views\decorators\http.py

部分源码

代码语言:javascript
复制
"""
Decorators for views based on HTTP headers.
"""

import logging
from calendar import timegm
from functools import wraps

from django.http import HttpResponseNotAllowed
from django.middleware.http import ConditionalGetMiddleware
from django.utils.cache import get_conditional_response
from django.utils.decorators import available_attrs, decorator_from_middleware
from django.utils.http import http_date, quote_etag

conditional_page = decorator_from_middleware(ConditionalGetMiddleware)

logger = logging.getLogger('django.request')


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, assigned=available_attrs(func))
        def inner(request, *args, **kwargs):
            if request.method not in request_method_list:
                logger.warning(
                    'Method Not Allowed (%s): %s', request.method, request.path,
                    extra={'status_code': 405, 'request': request}
                )
                return HttpResponseNotAllowed(request_method_list)
            return func(request, *args, **kwargs)
        return inner
    return decorator


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."

使用方法

views.py

代码语言:javascript
复制
from django.views.decorators.http import require_GET, require_POST
from django.views.decorators.http import require_http_methods
from django.views.decorators.http import require_safe


@require_GET
def test_get(request):
    """
    Decorator to require that a view only accepts the GET method.
    require_GET 装饰器只接受 GET 请求,否则返回 405 网页状态码。
    """
    pass
    
    
@require_POST
def test_post(request):
    """
    Decorator to require that a view only accepts the POST method.
    require_POST 装饰器只接受 POST 请求,否则返回 405 网页状态码。
    """
    pass
    
    
@require_http_methods(["GET", "POST"])
def test_get_and_post(request):
    """
    Decorator to require that a view only accepts safe methods: GET and POST.
    装饰器接受 GET 和 POST 请求,否则返回 405 网页状态码。
    """
    pass


@require_safe
def test_get_and_head(request):
    """
    Decorator to require that a view only accepts safe methods: GET and HEAD.
    require_safe 装饰器只接受 GET 和 HEAD 请求,否则返回 405 网页状态码。
    """
    pass
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-1-6 10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码路径
  • 部分源码
  • 使用方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档