一:类视图

  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. ECharts插件介绍(图表库)

    ECharts是一个非常好用的插件,用于进行 树状图,折线图,饼图,地图等等,系列视图的绘制.(详情看官网) 了解: AMD:模块化开发方式: 引入文件后:console.log(echarts) / ...

  2. java虚拟机规范-运行时栈帧

    前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调. 引用 java虚拟机规范 java虚拟机规范-运行时数据区 java内存运行时的栈帧结构 java ...

  3. SynchronousQueue 源码分析

    SynchronousQueue SynchronousQueue 能解决什么问题?什么时候使用 SynchronousQueue? 1)SynchronousQueue 没有任何内部容量. 2)Sy ...

  4. 阶段1 语言基础+高级_1-2 -面向对象和封装_16this关键字的作用

    this主要是在重名的情况下 ,起到区分的效果 新建demo04的包,里面新建类Person 通过this.进行区分 this关键字可以解决重名 分不开的问题 这里的person调用的sayHello ...

  5. Java 基础-异常处理

    在 Java 中声明了很多异常类,每个异常类都表示一种运行错误.程序运行过程中发生一个可识别的运行错误时(可以找到与错误匹配的异常类,例如被除数为 0 时会触发 java.lang.Arithmeti ...

  6. Python笔记(二十三)_魔法方法_字符串的魔法方法

    __str__和__repr__ 如果要把一个类的实例变成字符串,就需要实现魔法方法__str__()和__repr__ >>>class A: def name(self): re ...

  7. Spring MVC @RequestBody自动转JSON HTTP415错误解决方法

    转自:http://blog.csdn.net/tiantiandjava/article/details/46125141 项目中想用@RequestBody直接接收json串转成对象 网上查了使用 ...

  8. accept()出的socket不会使用新的端口号

    1 标识一个socket的是四元组,不只是端口号 client ip : client port : server ip : server port 2 accept出的新的socket仍然使用和li ...

  9. Mybatis中SqlSessionFactory和SqlSession学习和原理

    源码git地址:https://github.com/mybatis/mybatis-3 目标结构: mybatis是数据持久化解决方案将用户从JDBC访问中解放出来,用户只需要定义需要操作的SQL语 ...

  10. Visual Studio 2017打包安装项目

    在我们用VS编好上位机后,就可以在自己电脑运行上位机,但是想其他人电脑运行上位机可能就行不通了,因为其他人电脑不一定有所需要的运行环境.这时我们就需要打包安装,把运行软件所需要的环境都打包在安装包里. ...