一:类视图

  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之类视图的更多相关文章

  1. 【Django】 视图层说明

    [Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对 ...

  2. Django基本视图

    Django基本视图 下面这三个类也许不能提供项目所需的所有的功能,这些应用于基于类的视图或Mixins情形下. 大多数Django的内建视图继承于其他基于类的视图或者各种mixins中,因为继承链是 ...

  3. Django之视图

    Django之视图   Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个 ...

  4. Django通用视图APIView和视图集ViewSet的介绍和使用

    原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630   1.APIView DRF框架的视图的基类是 ...

  5. Django之视图函数总结

    Django之视图函数总结 HttpRequest与HttpResponse http请求中产生两个核心对象: HttpRequest对象:用户请求相关的所有信息(对象) HttpResponse对象 ...

  6. Django _VIEW视图_源码分析

    Django _VIEW视图: 1. 点击as_view方法. 第二步: as_view () 为VIEW 类里定义的,到时候我们定义业务逻辑的类就继承这个VIEW类. view方法内返回的是disp ...

  7. Django的视图层简介

    Django的视图层 视图函数 所谓视图函数,其实就是我们Django项目中各个应用中的views.py文件中定义的每个用来处理URL路由映射到这里的逻辑函数.一个视图函数简称视图,它是个简单的Pyt ...

  8. django views视图函数返回值 return redirect httpresponse总结

    django views视图函数返回值 return redirect  render httpresponse总结

  9. Django的视图流式响应机制

    Django的视图流式响应机制 Django的响应类型:一次性响应和流式响应. 一次性响应,顾名思义,将响应内容一次性反馈给用户.HttpResponse类及子类和JsonResponse类属于一次性 ...

  10. Django的视图响应类型

    Django的视图响应类型 一. 视图函数编写原则 视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能:视图函数可以返回Web文本,页面.重定向.错误.图片等任何内容:视图函数通过H ...

随机推荐

  1. ORA-00346,借助_allow_resetlogs_corruption开库

    Mon Aug 06 10:15:08 2018Errors in file /data/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_6831.trc ...

  2. Redis安装启动,Redis Desktop Manager安装

    Window 下安装下载地址:https://github.com/MSOpenTech/redis/releases.Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这 ...

  3. format和urlencode的使用对比

    一:format的基本语法使用 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数,位置可以不按顺序. 例如: >>>"{} {}&q ...

  4. Leaflet

    https://leafletjs.com/ https://github.com/Leaflet/Leaflet

  5. Appium-入门实例1

    参考:(https://blog.csdn.net/zh175578809/article/details/76862590) 第一步:启动虚拟设备 在运行App之前,首先需要创建一个Android模 ...

  6. 【ABAP系列】SAP ABAP WS_DELIVERY_UPDATE 修改数量、过账日期并发货过账

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP WS_DELI ...

  7. 20190902 On Java8 第十六章 代码校验

    第十六章 代码校验 你永远不能保证你的代码是正确的,你只能证明它是错的. 测试 测试覆盖率的幻觉 测试覆盖率,同样也称为代码覆盖率,度量代码的测试百分比.百分比越高,测试的覆盖率越大. 当分析一个未知 ...

  8. h2内嵌数据库使用

    参考文档 1 https://www.cnblogs.com/xdp-gacl/p/4171024.html 参考文档 2 https://blog.csdn.net/mafan121/article ...

  9. JAVA Error:The project was not built since its build path is incomplete. Cannot find the class file for java.util.Map$Entry.....

    今天,学习Netty框架时遇到error:Description Resource Path Location Type:The project was not built since its bui ...

  10. 靶形数独 (dfs+预处理+状态压缩)

    #2591. 「NOIP2009」靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们 ...