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

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不会对服务器产生增删改的行为,因此这是一种相对安全的请求方式。

112.限制请求的method装饰器的更多相关文章

  1. csrf跨站请求、相关装饰器、auth模块使用

    昨日内容回顾 django操作cookie和session # 作用:就是保存用户信息,保存一系列数据,还可以做缓存 保留一段时间 # session是基于cookie工作的 1. 数据是保存在服务端 ...

  2. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  3. day054 组件 CBV FBV 装饰器 ORM增删改查

    组件: ​ 把一小段HTML 放在一个HTML中 nav.html ​ 使用: ​ {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...

  4. django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件

    一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用  {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...

  5. Django中类视图使用装饰器的方式

    类视图使用装饰器 为类视图添加装饰器,可以使用两种方法. 为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图. def ...

  6. django 内置用户-装饰器

    """ 一.如何给python内置用户添加额外的字段,注意一定义在没有迁移数据之前定义,否则会报错 1.在models中先调用 from django.contrib.a ...

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

    from flask import Flask from flask import request from flask import render_template from flask_wtf i ...

  8. tornado利用装饰器记录每个http请求

    python利用装饰器记录每个http请求 设置装饰器 from functools import wraps from datetime import datetime ""&q ...

  9. 【Flask】 python学习第一章 - 4.0 钩子函数和装饰器路由实现 session-cookie 请求上下文

    钩子函数和装饰器路由实现 before_request 每次请求都会触发 before_first_requrest  第一次请求前触发 after_request  请求后触发 并返回参数 tear ...

随机推荐

  1. base64和blob

    base64是二进制数据的一个编码格式,就像utf8一样的东西,他跟json一样,也是前后端交互能够相互识别的数据,他更多的是用来传递文件数据,并且如果是图片的base64,可以用来压缩 获取base ...

  2. 使用Spring Data JPA的Spring Boot

    本文教你开始使用Spring Data JPA.来自优锐课JAVA架构专业讲师精心整理. 欢迎使用带有Spring Data JPA的Spring Boot教程!在本教程中,我们将看到Spring D ...

  3. 格雷码(Grey Code)生成规则

    (1) Grey码在FPGA实际应用中是实用的码,在8421BCD码累加计数器中,如果寄存器需要发生多位(两位或者以上)的跳变,会出现中间态,这样作为组合逻辑的输入是不稳妥的. 下面看两个中间态的例子 ...

  4. SpringBoot-集成通用mapper

    SpringBoot-集成通用mapper SpringBoot-集成通用mapper ​ 我们在SpringBoot中整合了MyBatis,但是大量重复的增删改查还是很头疼的问题,MyBatis也给 ...

  5. PHPmyadmin Getshell(10.25 第二十七天)

    PHPmyadmin Getshell的方法(1)show global variables like '% secure-file-priv%' 如果该参数设置为空或者指定的文件夹可以利用,然后写木 ...

  6. HDU 5501:The Highest Mark 01背包

    The Highest Mark  Accepts: 71  Submissions: 197  Time Limit: 2000/1000 MS (Java/Others)  Memory Limi ...

  7. nodejs - fs模块 - 文件操作

    1, fs.stat  检测是文件还是目录 2, fs.mkdir 创建目录 var fs = require('fs') fs.mkdir('./dir',function(err){ if(err ...

  8. 089-PHP数组运用 - 通过循环函数取出部分成员合并成新数组

    <?php function myfunc($arr){ //定义过滤函数 $j=count($arr); for($i=0;$i<$j;$i++){ if($arr[$i]>=0& ...

  9. 7. 单机版Redis的安装以及Redis生产环境启动方案

    安装单机版redis redis的生产环境启动方案redis cli的使用 1. 安装单机版redis 大家可以自己去官网下载,当然也可以用课程提供的压缩包 wget http://downloads ...

  10. Power BI 安装注册教程

    把下载好的MSI包PBIDesktop_x64.msi 双击安装 点击下一步 选择文件路径 点击安装 点击完成 初始化中 安装完成界面 账号注册 https://powerbi.microsoft.c ...