一:类视图

  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. zk的KeeperErrorCode = ConnectionLoss错误

    额,这东西都快把人搞崩溃了,各种排查各种正常. 最后竟然是因为我在客户端未连接上zkserver的时候就进行了create操作造成的错误. 噗, Exception in thread "m ...

  2. Python分析《武林外传》 -----转载

    转载原链接:http://www.cnblogs.com/fredkeke/p/8328387.html 我一向比较喜欢看武侠电影.小说,但是06年武林外传开播的时候并没有追剧,简单扫几眼之后发现他们 ...

  3. redispy

    w wuser@ubuntu:~/redispy$ redis-cli > keys * ) "w" ) "wpy" > set w1 w1valu ...

  4. Swiper轮播手动后不动

    最近项目首页轮播图用了Swiper轮播,今天突然发现轮播图动画初始正常但是手动换过之后就不动了,解决方法有两种,具体根据采用的情况为准: 1.autoplayDisableOnInteraction: ...

  5. boost的libboost_system问题

    最近把cpp代码从开发机放到eclipse时,遇到了不少路径问题. 安装boost的时候,其实很简单 wget http://sourceforge.net/projects/boost/files/ ...

  6. Web高级 JavaScript中的算法

    算法 排序算法 稳定排序 待排序序列中相等元素在排序完成后,原有先后顺序不变. 非稳定排序 有序度 待排序序列中有序关系的元素对个数. 逆序度 1. 插入排序 遍历有序数组,对比待插入的元素大小,找到 ...

  7. lambda表达式(1)

    转自:http://www.cnblogs.com/knowledgesea/p/3163725.html 简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能 ...

  8. PyTorch笔记之 Dataset 和 Dataloader

    一.简介 在 PyTorch 中,我们的数据集往往会用一个类去表示,在训练时用 Dataloader 产生一个 batch 的数据 https://pytorch.org/tutorials/begi ...

  9. 设置国内AndriodSDK代理

    由于一些原因,Google相关很多服务都无法访问,所以在很多时候我们SDK也无法升级,当然通过技术手段肯定可以解决,但是比较麻烦,而且下载速度也不怎么样. 这里笔者介绍一个国内的Android镜像站, ...

  10. JDK11 | 第二篇 : JShell 工具

    文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/saHBSTo4OjsIIqv_ixigjg 一.简介 Java Shell工具是JDK1. ...