Django知识补充之CBV

Django:

url    -->  def函数      FBV[function based view]  用函数和URL进行匹配

url    -->  类           CBV[function based view]  用类和URL进行匹配

POSTMAN插件

http://blog.csdn.net/zzy1078689276/article/details/77528249

基于CBV的登录实例:

settings.py

INSTALLED_APPS = [...'app01',   # 注册app
]
STATICFILES_DIRS = (os.path.join(BASE_DIR, "statics"),)  # 现添加的配置,这里是元组,注意逗号
TEMPLATES = [...'DIRS': [os.path.join(BASE_DIR, 'templates')],
]

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from app01 import views
urlpatterns = [# 基于CBV的登录# url(r'^login.html/', views.login),  # 原来基于函数url(r'^login.html/', views.Login.as_view()), # 现在基于类名.as_view()
]

views.py

from django.shortcuts import render, redirect
from app01 import models
# 基于CBV的登录,需要导入views
from django import views
class Login(views.View):# http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']def get(self, request, *args, **kwargs):print(request.method, 'GGGGGGGGGGGG')message = ''return render(request, 'login.html', {'message': message})  # 这里是网页htmldef post(self, request, *args, **kwargs):print(request.method, 'OOOOOOOOOOOOO')username = request.POST.get("user")password = request.POST.get("pass")print('username: %s, password:%s' % (username, password))# obj = models.Administrator.objects.filter(username=username, password=password).count()# if obj:   从数据库内取出数据,进行判断也可以if username == 'root' and password == 'root':req = redirect('/index.html/')  # 接收redirect对象,# 这里是浏览器路径,伪静态# req.set_cookie('username', username, max_age=10)  # 设置超时时间10simport datetimetimeout = datetime.datetime.now() + datetime.timedelta(seconds=10)req.set_cookie('username', username, max_age=10, expires=timeout)# IE设置超时时间10sreturn req# return redirect('/index.html') # 与上面3行同,只是添加了Cookieelse:message = '用户名或密码错误'return render(request, 'login.html', {'message': message})  # 这里是网页html

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{# 伪静态#}<form action="/login.html/" method="post">{% csrf_token %}   {# 为跨站请求 #}<div><label for="user">用户名</label><input id="user" name="user" type="text"></div><div><label for="pass">密&nbsp;&nbsp;&nbsp;&nbsp;码</label><input id="pass" name="pass" type="password"></div><div><label></label><input value="登录" type="submit"><span style="color: red">{{ message }}</span></div></form>
</body>
</html>

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
</head>
<body><h2>hello, {{ username }}</h2>
</body>
</html>

页面显示:

CBV基于装饰器的使用<一>  ---基于Python旧方法

 

CBV基于装饰器的使用<一>  ---基于Python旧方法

装饰器:函数执行之前/后可以增加扩展功能

有多个方法的时候,必须给每个方法添加装饰器哈

CBV的反射原理

单一装饰器

views.py

from django.shortcuts import render, redirect
from app01 import models
# 基于CBV的登录,需要导入views
from django import views
from django.utils.decorators import method_decorator  # 导入装饰器
# 基于CBV的装饰器的使用
def outer(func):def inner(request, *args, **kwargs):print(request.method)return func(request, *args, **kwargs)return innerclass Login(views.View):# http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']@method_decorator(outer)def get(self, request, *args, **kwargs):message = ''return render(request, 'login.html', {'message': message})  # 这里是网页html@method_decorator(outer)def post(self, request, *args, **kwargs):username = request.POST.get("user")password = request.POST.get("pass")print('username: %s, password:%s' % (username, password))# obj = models.Administrator.objects.filter(username=username, password=password).count()# if obj:   从数据库内取出数据,进行判断也可以if username == 'root' and password == 'root':req = redirect('/index.html/')  # 接收redirect对象,# 这里是浏览器路径,伪静态# req.set_cookie('username', username, max_age=10)  # 设置超时时间10simport datetimetimeout = datetime.datetime.now() + datetime.timedelta(seconds=10)req.set_cookie('username', username, max_age=10, expires=timeout)# IE设置超时时间10sreturn req# return redirect('/index.html') # 与上面3行同,只是添加了Cookieelse:message = '用户名或密码错误'return render(request, 'login.html', {'message': message})  # 这里是网页html

CBV基于装饰器的使用<二>  --基于Django的dispatch[多个装饰器]

CBV基于装饰器的使用<二>  --基于Django的dispatch[多个装饰器]

如果对某一种请求做处理: 单一装饰器

如果对所有的请求做处理: dispatch单一装饰器

添加装饰器有2中方法:

1.类上添加

2.方法上添加

自定义转发dispatch函数

from django import views
from django.utils.decorators import method_decorator  # 导入装饰器
class Login(views.View):# http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']# 自定义转发器,URL进来都在此处进行URL转发,我们可以有一些预操作[函数验证可以放此处]def dispatch(self, request, *args, **kwargs):print('自定义dispatch: 前')# if request.method == 'POST':# return HttpResponse("Good Bye")    # 预操作处理# 请求先到Login的dispatch,然后调用父类的dispatch,返回结果给了objobj = super(Login, self).dispatch(request, *args, **kwargs)  # 自定义转发且调用父类dispatch# 将父类的返回结果返回给界面,否则界面报错print('自定义dispatch: 后')return objdef get(self, request, *args, **kwargs):message = ''return render(request, 'login.html', {'message': message})  # 这里是网页html...同上

转载于:https://www.cnblogs.com/ftl1012/p/9403851.html

Python学习---django知识补充之CBV相关推荐

  1. Django知识补充

    目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts importre ...

  2. Python 学习 --- 基础知识

    第一章 1.python于1989年底由范.罗萨姆始创.是一种面向对象的解释型语言. 第二章 python起步 1.输出语句print. print和%结合使用,实现字符串的替换,与C语言中的prti ...

  3. Python学习——django模型

    django框架中的模型models是用来控制数据库的,属于MVT中的M层.有关数据的操作的都要经过models模块. 模型的使用步骤: 配置数据库 models.py定义模型类 激活模型 使用模型 ...

  4. python学习-Django (3)

    ORM----多对多查询 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详 ...

  5. python开发信息系统权限设置_[Python学习] Django 权限控制

    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 主要内容 什么是权限管理? Web 权限 Django 权限机制 Django ...

  6. Python学习---Django的基础操作180116

    Django创建数据库操作 django流程之model实例 settigs.py:更改Django2.0.1的配置,更新为之前的路径配置 'DIRS': [os.path.join(BASE_DIR ...

  7. [Python学习] Django 权限控制

    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 主要内容 什么是权限管理? Web 权限 Django 权限机制 Django ...

  8. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

  9. python100个必背知识-python学习必备知识汇总

    一.变量 1.变量 •指在程序执行过程中,可变的量: •定义一个变量,就会伴随有3个特征,分别是内存ID.数据类型和变量值. •其他语言运行完之前,一定要手动把程序的内存空间释放掉.但python解释 ...

最新文章

  1. AI每日精选:AI可追踪人体血糖水平;中国或成为首个AI超级大国
  2. 常见的几种最优化方法
  3. 致各位读者,关于资源的问题
  4. 使用SpringBoot yml配置文件
  5. 梦幻西游服务器每周几维护,梦幻西游5月6日维护公告:唯美版地图不再更新
  6. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
  7. Java中的方法(形参及实参)return返回类型
  8. 遥感专业学c语言吗,2019遥感科学与技术专业怎么样、学什么、前景好吗
  9. java语法有哪些_java编程基础语法都有哪些
  10. Linux开发书籍推荐
  11. Easy Audio CD Burner 算法分析及逆向推算(图)
  12. View和ViewGroup中的mParent
  13. 电脑ie怎么设置html5,电脑中IE浏览器工具栏设置选项显示的是英文如何改成中文...
  14. 券商评级:南山铝业 中天科技 大族激光
  15. 【成长访谈】周新林:靠持续的努力,总能换来自己期望的生活
  16. dos版电影 (telnet towel.blinkenlights.nl的奇迹!!)-STAR WARS in ARCII
  17. mysql like json_Mysql之模糊查询
  18. 使用opencv中的方法进行图像保存时,出现保存的图像全黑的问题
  19. 论文投稿指南——中文核心期刊推荐(植物保护)
  20. 数据仓库、数据集市、数据湖,你的企业更适合哪种数据管理架构?

热门文章

  1. mysql 帐号开启远程_两大步骤教您开启MySQL 数据库远程登陆帐号
  2. 华为摄像机搜索软件_别人的终点华为的起点!用普惠AI守护城市安全
  3. mysql视图表怎么设置约束_MySQL一一sql的视图、索引、约束
  4. linux c实现mypwd
  5. 160 - 19 Brad Soblesky.2
  6. 《LeetcodeHot100非困难题补录》
  7. 什么是alpha测试_什么是ALPHA?
  8. isc dhcp_ISC的完整形式是什么?
  9. ONGC的完整形式是什么?
  10. JavaScript中的String()函数与示例