django之类视图
一:类视图
1. 为什么使用类视图?
# 以注册请求逻辑为例
def register(request):
if request.method == "GET":
render(request, "register.html")
if request.method == "POST":
name = request.POST.get("name")
age = request.POST.get("age")
# 加入验证字段的逻辑
# 存储数据库的逻辑
上面的一段函数里面处理了两个逻辑,get逻辑和post逻辑,也能满足业务需求,那么我们为什么要使用类视图呢?
使用类视图的好处:1.代码整洁,可读性强 2: 通过类的继承,直接可以使用类视图中的方法。
二:类视图使用的例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="POST">
# 注意:id="username"导致,后端不能通过username的键取到输入的值。
姓名:<input type="text" name="username" placeholder="用户名">
密码:<input type="password" name="password" placeholder="密码">
<input type="submit"> </form>
</body>
</html>

from django.conf.urls import url
from .views import RegisterView urlpatterns = [
url(r"^register/", RegisterView.as_view()),
]
from django.http import JsonResponse
from django.shortcuts import render
from django.views.generic import View class RegisterView(View):
"""类是图处理注册""" def get(self,request):
"""处理get请求"""
return render(request, "./register.html") def post(self,request):
"""处理post请求"""
name = request.POST.get("username")
password = request.POST.get("password")
json_dict = {"name":name,"password":password} # 给前端返回一个json字符串内容
return JsonResponse(json_dict)
前端界面

三:装饰器在类视图中的应用
使用场景:页面必须登录后才能访问,那么在进入类视图,调用get方法后,实现业务逻辑之前,先使用装饰器验证一下,用户是否已经登录。
from django.http import JsonResponse
from django.shortcuts import render
from django.views.generic import View
from django.utils.decorators import method_decorator def decoreate_login(func):
def inner(request,*args,**kwargs):
name = request.COOKIES.get("name")
if not name:
return JsonResponse({"error":"用户未登录"})
return func(request, *args,**kwargs)
return inner class RegisterView(View):
"""类是图处理注册"""
# 只是对类中的某一个方法进行了装饰,这是一种方式的装饰。
@method_decorator(decoreate_login)
def get(self,request):
"""处理get请求"""
return render(request, "./register.html") def post(self,request):
"""处理post请求"""
name = request.POST.get("username")
password = request.POST.get("password")
json_dict = {"name":name,"password":password}
return JsonResponse(json_dict)

from django.http import JsonResponse
from django.shortcuts import render
from django.views.generic import View
from django.utils.decorators import method_decorator def decoreate_login(func):
def inner(request,*args,**kwargs):
name = request.COOKIES.get("name")
if not name:
return JsonResponse({"error":"用户未登录"})
return func(request, *args,**kwargs)
return inner # 和上面的方式不一样,在类的外面进行装饰,name属性,指定装饰器的函数名字为get,效果都一样。
@method_decorator(decoreate_login,name="get")
class RegisterView(View):
"""类是图处理注册"""
def get(self,request):
"""处理get请求"""
return render(request, "./register.html") def post(self,request):
"""处理post请求"""
name = request.POST.get("username")
password = request.POST.get("password")
json_dict = {"name":name,"password":password}
return JsonResponse(json_dict)

使用场景:禁止黑名单用户访问,例如禁止127.0.0.1的ip访问我们的视图。
from django.http import JsonResponse
from django.shortcuts import render
from django.views.generic import View
from django.utils.decorators import method_decorator def ban_ip(func):
def inner(request,*args,**kwargs):
ip = request.META.get("REMOTE_ADDR")
if ip in ["127.0.0.1","192.168.33.21"]:
return JsonResponse({"error":"此IP已经被封,封存时间为24小时"})
return func(request, *args,**kwargs)
return inner class RegisterView(View):
"""类是图处理注册"""
def get(self,request):
"""处理get请求"""
return render(request, "./register.html") @method_decorator(ban_ip)
def post(self,request):
"""处理post请求"""
name = request.POST.get("username")
password = request.POST.get("password")
json_dict = {"name":name,"password":password}
return JsonResponse(json_dict)

点击提交按钮后django之类视图的更多相关文章
- 【Django】 视图层说明
[Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...
- Django基本视图
Django基本视图 下面这三个类也许不能提供项目所需的所有的功能,这些应用于基于类的视图或Mixins情形下. 大多数Django的内建视图继承于其他基于类的视图或者各种mixins中,因为继承链是 ...
- Django之视图
Django之视图 Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个 ...
- Django通用视图APIView和视图集ViewSet的介绍和使用
原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630 1.APIView DRF框架的视图的基类是 ...
- Django之视图函数总结
Django之视图函数总结 HttpRequest与HttpResponse http请求中产生两个核心对象: HttpRequest对象:用户请求相关的所有信息(对象) HttpResponse对象 ...
- Django _VIEW视图_源码分析
Django _VIEW视图: 1. 点击as_view方法. 第二步: as_view () 为VIEW 类里定义的,到时候我们定义业务逻辑的类就继承这个VIEW类. view方法内返回的是disp ...
- Django的视图层简介
Django的视图层 视图函数 所谓视图函数,其实就是我们Django项目中各个应用中的views.py文件中定义的每个用来处理URL路由映射到这里的逻辑函数.一个视图函数简称视图,它是个简单的Pyt ...
- django views视图函数返回值 return redirect httpresponse总结
django views视图函数返回值 return redirect render httpresponse总结
- Django的视图流式响应机制
Django的视图流式响应机制 Django的响应类型:一次性响应和流式响应. 一次性响应,顾名思义,将响应内容一次性反馈给用户.HttpResponse类及子类和JsonResponse类属于一次性 ...
- Django的视图响应类型
Django的视图响应类型 一. 视图函数编写原则 视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能:视图函数可以返回Web文本,页面.重定向.错误.图片等任何内容:视图函数通过H ...
随机推荐
- Linux中的NetworkManager网络管理
转载关于 NM_CONTROLLED和Network Manager Redhat在RHEL 6(Redhat Enterprise Linux),上搞了一个 Network manger 服务(同样 ...
- java将url里面的中文改成ASCII字符集 和 SCII字符集 改成 中文
package com.example.demo; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; / ...
- Delphi XE2 之 FireMonkey 入门(11) - 控件居中、旋转、透明
RotationAngle.RotationCenter.Opacity 属性继承自 TControl(FMX.Types), 这些新属性成了控件的基本功能. 先在 HD 窗体上添加 TRectang ...
- Windows Server 2008 R2 为用户“IIS APPPOOL\DefaultAppPool”授予的权限不足,无法执行此操作
报表开发与部署好后,也嵌入到aspx页面中了,使用VS自带的Web服务器组件,一切正常,当部署到IIS中的时,出现了如下错误: 为用户“IIS APPPOOL\DefaultAppPool”授予的权限 ...
- sudo: pip:找不到命令
https://blog.csdn.net/fcku_88/article/details/84191288
- 【ABAP系列】SAP 读取生产订单 记入文档的货物移动明细
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 读取生产订单 记入文档的 ...
- idea的类头注释和方法注释的编辑
一:配置类头注释 1:点击file,点击settings 2:点击editor,选择 file and code template ,然后看右侧部分点击include,之后选中File Header ...
- PS把一张白色背景的图片设为透明
方法一: 1.双击图层缩略图上的小锁图标(注意,这里不要拖动小锁进行删除锁定),弹出“新建图层”,确定 2.右键左侧第四个功能菜单,选择魔棒工具 3.用魔棒工具在白色背景区域点击一下,选中白色区域背景 ...
- [Python3] 016 字典:给我一块硬盘,我可以写尽天下!
目录 0 字典的独白 1 字典的创建 2 字典的特性 3 字典的常见操作 (1) 数据的访问.更改与删除 (2) 成员检测 (3) 遍历 4 字典生成式 5 字典的内置方法 6 可供字典使用的其它方法 ...
- JAVA总结--设计模式
三大类设计模式: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为 ...