102.限制请求的method装饰器:require_http_methods,require_GET,require_POST,require_safe

客户端与服务器之间最常用的两种请求方式:

1. GET请求一般是用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改。
2.POST请求一般是用来向服务器提交数据,会对服务器的状态进行更改。

限制请求装饰器:

Django内置的视图装饰器可以给视图提供一下限制,比如正视图只能通过GET的method访问等。常用的内置视图装饰器:

1. django.http.decorators.http.require_http_methods: 这个装饰器需要传递一个允许访问的方法的列表。
(1)比如,如果客户端发送的是GET请求,就返回给用户一个添加文章的界面;如果发送的是POST请求,就将提交的数据进行保存到数据库中。views.py文件中示例代码如下:
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse
from django.shortcuts import render
from .models import Article

@require_http_methods(['GET', 'POST'])
def index2(request):
    <!--首先判断客户端发送的是哪种请求GET OR POST-->
    <!--注意这里一定要是“==” 只有“==”才会返回True or False-->
    if request.method == 'GET':
        return render(request,'static/add.html')
    else:
        title = request.POST.get('title')
        content = request.POST.get('content')
        price = request.POST.get('price')
        Article.objects.create(title=title, content=content, price=price)
        articles = Article.objects.all()
        return render(request, 'static/index.html', context={'articles': articles}
(2)index.html示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <thead>
    <tr style="width: 20px">标题</tr>
    <tr style="width: 20px">内容</tr>
    <tr style="width: 20px">价格</tr>
    <tr style="width: 20px">创建时间</tr>
    </thead>
    <tbody>
    {% for article in articles %}
        <tr>
            <td><a href="#">{{ article.title }}</a></td>
            <td><a href="">{{ article.content }}</a></td>
            <td><a href="">{{ article.price }}</a></td>
            <td>{{ article.create_time }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>
(3)urls.py文件中示例代码如下:
from django.urls import path
from article import views

urlpatterns = [
    path('', views.index, name='index'),
    path('add/', views.add, name='add'),
    path('add2/', views.index2, name='add2'),
]
在Postman软件中,采用POST请求输入url:127.0.0.1:3000/add2/(在这里我修改了端口号为3000,默认情况为8000),并且在URL下面的Body中传入需要的参数值title,content,price.返回这样的结果:

在Postman软件采用GET请求访问url:127.0.0.1:3000/add2/,就会返回添加文章的页面,但是在Postman中,即使在表单中输入了数据点击提交按钮之后也没有任何反应,所以可以在浏览器中使用GET请求访问。点击提交按钮,就可以在数据库中看到新添加的文章信息了。

2. django.views.decorators.http.require_GET: 这个装饰器相当于是require_http_methods([‘GET‘])的简写形式,只允许使用GET的method来访问视图。
(1)比如,我们只允许GET请求访问首页,views.py文件中示例代码如下:
from django.views.decorators.http import require_GET

@require_GET
def index(request):
    articles = Article.objects.all()
    return render(request, 'static/index.html', context={'articles':articles})
(2)index.html中示例代码如下:
    <ul>
    {% for article in articles %}
        <li>{{% article.title %}}</li>
        <li>{{% article.content %}}</li>
        <li>{{% article.price %}}</li>
    {% endfor %}
    </ul>
3. django.views.decorators.http.require_POST: 这个装饰器相当于是require_http_methods([‘POST‘])的简写形式,只允许使用POST请求的method来访问视图,示例代码如下:
from django.views.decorators.http import require_POST

@require_POST
def add(request):
    title = request.POST.get('title')
    content = request.POST.get('content')
    Article.objects.create(title=title, content=content)
    return HttpResponse('success')
4. django.views.decorators.http.require_safe: 这个装饰器相当于是require_http_methods([‘GET‘, ‘HEAD‘])的简写形式,只允许使用相对安全的方式来访问视图,因为GET和HEAD不会对服务器产生增删改的行为,因此这是一种相对安全的请求方式。

原文地址:https://www.cnblogs.com/guyan-2020/p/12287737.html

时间: 2024-07-30 04:34:48

102.限制请求的method装饰器:require_http_methods,require_GET,require_POST,require_safe的相关文章

102:限制请求method装饰器

常用的请求method: GET请求:GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST请求:POST请求一般是用来向服务器提交数据,会对服务器的状态进行更改.比如提交一篇文章给服务器. 限制请求装饰器: Django内置的视图装饰器可以给视图提供一些限制.比如这个视图只能通过GET的method访问等.以下将介绍一些常用的内置视图装饰器. 1.django.http.decorators.http.require_

Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

from flask import Flask from flask import request from flask import render_template from flask_wtf import CSRFProtect as WTF # 利用表单类去渲染模板时需要用到 from forms import LoginForm app = Flask(__name__) WTF(app) # 在app上注册一个 WTF (所有的flask插件都必须进行注册) app.config.f

Django处理HTTP 请求中装饰器的使用

在学习Django的过程中,看见通过装饰器对view进行装饰,使得view可以提前处理Etag,if-modify-since以及检测请求的类型 先谈谈检测请求的类型: 我们知道Django的view是不区分请求的方法的,也就是说对于一个相同的URL,无论你是get或是post,你都会进入到一个相同的处理逻辑中. 当然我们可以自己在view中检测request.method. 但是如果提取到一个公共的需求的角度,可以认为每一个view都需要检测对应的方法. 首先看下我们希望如何使用: #app.

跨站请求伪造(scrf)、设置scrf值、CBV加装饰器

跨站请求伪造(scrf) 听说过钓鱼网站吗? 就类似于你搭建了一个跟银行一模一样的web页面 用户在你的网站转账的时候输入用户名 密码 对方账户 银行里面的钱确实少了 但是发现收款人变了 原理: 你写的form表单中 用户的用户名 密码都会真实的提交给银行后台 但是收款人的账户却不是用户填的 你暴露给用户的是一个没有name属性的input框 你自己提前写好了一个隐藏的带有name和value的input框 解决钓鱼网站的策略: 只要是用户想要提交post请求的页面 我在返回给用户的时候就提前设

编写装饰器实现python请求错误重试功能

在做接口自动化测试的时候,总会遇到,因连接超时等错误导致,接口脚本失败. 官方给出的方法: max_retries=5 出错重试5次注意的是,这个只对DNS,连接错误进行重试. from requests.adapters import HTTPAdapter s = requests.Session() s.mount('http://',HTTPAdapter(max_retries=5)) s.mount('https://',HTTPAdapter(max_retries=5)) s.g

python深入学习--decorator强大的装饰器

一.decorator基础. 最初接触python是在大学毕业进入某一游戏公司后,最开始觉得python不严谨,很不喜欢python这种"简单"的脚本,但是后来,越来越离不开python了,觉得这么灵活方便的语言,简直是程序员的福音,尤其是它的数据结构,他带来了一个"{}" 大括号就能搞定一切的时代.当然python还有很多优秀的特性.现在我们来讲python的特性之一--decorator(装饰器). 装饰器,顾名思义就是修饰函数或者类的,它把要装饰的函数作为参数

simple_tag,filte,分页以及cookie和装饰器

自定义simple_tag 内置的方法 首先Django中包含了很多内置的方法: 这里通过lower实现 在views视图函数中写如下代码: def tp3(request): name= "ABCDEFG" return render(request,"tp3.html",{"name":name}) 在urls路由关系中添加如下: url(r'^tp3/',views.tp3), 在tp3页面中写如下: {{ name }} {{ name|

python使用装饰器@函数式化django开发

django是一个python web开发的框架.作为一个框架MVC的架构已经实现起来了.但是编码的时候你经常要进行进一步的抽象. AOP是一种称为面向切面的开发思想,意思是将部分功能代码在运行时动态的加载到指定位置.最常见的应用是Spring中的依赖注入@Autowired. 而装饰器也可以被看成是一种AOP的实现,但是又有些许的不同,让我们来体会一下. 在我们的实例中我们将django中的views.py(其实是controller层)拆出了implement.py(实现)和decorato

设计模式(八)装饰器模式Decorator(结构型)

设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上. 通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机.如果  你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许