Python学习---django知识补充之CBV
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}) # 这里是网页html
def 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) # 设置超时时间10s
import datetime
timeout = datetime.datetime.now() + datetime.timedelta(seconds=10)
req.set_cookie('username', username, max_age=10, expires=timeout)
# IE设置超时时间10s
return req
# return redirect('/index.html') # 与上面3行同,只是添加了Cookie
else:
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">密 码</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 inner class 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) # 设置超时时间10s
import datetime
timeout = datetime.datetime.now() + datetime.timedelta(seconds=10)
req.set_cookie('username', username, max_age=10, expires=timeout)
# IE设置超时时间10s
return req
# return redirect('/index.html') # 与上面3行同,只是添加了Cookie
else:
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,返回结果给了obj
obj = super(Login, self).dispatch(request, *args, **kwargs) # 自定义转发且调用父类dispatch
# 将父类的返回结果返回给界面,否则界面报错
print('自定义dispatch: 后')
return obj def get(self, request, *args, **kwargs):
message = ''
return render(request, 'login.html', {'message': message}) # 这里是网页html
...同上
Python学习---django知识补充之CBV的更多相关文章
- 【python学习小知识】求绝对值和numpy和tensor的相互转换
一.python求绝对值的三种方法 1.条件判断 2.内置函数abs() 3.内置模块 math.fabs 1.条件判段,判断大于0还是小于0,小于0则输出相反数即可 # 法1:使用条件判断求绝对值 ...
- Python学习---django模板语法180122
django模板语法[Template] 模版的组成: HTML代码+逻辑控制代码 <h1> {{ user_name }} </h1> 逻辑控制代码的组成: 1.变量: ...
- Python学习---Django下的Sql性能的测试
安装django-debug-tools Python学习---django-debug-tools安装 性能测试: settings.py INSTALLED_APPS = [ ... 'app01 ...
- python学习-- Django根据现有数据库,自动生成models模型文件
Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自 ...
- Django知识补充
目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts import r ...
- Python之Django rest_Framework补充
一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征状态转移" ...
- Python学习---django下的cookie操作 180201
什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度 3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...
- Python学习---django之ORM语法[对象关系映射]180124
ORM语法[对象关系映射] ORM: 用面向对象的方式去操作数据库的创建表以及增删改查等操作. 优点:1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句.快速开发. 2 ...
- Python学习---Django的基础学习
django实现流程 Django学习框架: #安装: pip3 install django 添加环境变量 #1 创建project django-ad ...
随机推荐
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
<Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...
- Hive 安装
在安装Hive时,一定要在该机器上添加了hadoop服务. 下载并解压文件 tar zxvf apache-hive-3.1.1-bin.tar.gz mv apache-hive-3.1.1 /op ...
- [中英对照]The sysfs Filesystem | sysfs文件系统
The sysfs Filesystem | sysfs文件系统 Abstract | 摘要 sysfs is a feature of the Linux 2.6 kernel that allow ...
- Windows7 x64 了解堆
一.前言 堆对于开发者一般来说是熟悉又陌生的,熟悉是因为我们常常使用new/delete或者malloc/free使用堆,陌生是因为我们基本没有去了解堆的结构.堆在什么地方?怎么申请?怎么释放?系统又 ...
- redis数据类型(四)list类型
一.list类型 list是一个链表结构,可以理解为一个每个子元素都是 string 类型的双向链表. 主要功能是push.pop.获取一个范围的所有值等. 操作中key理解为链表的名字. 二.Lis ...
- 利用css实现搜索过滤
无意中找到一种利用css就可实现的搜索过滤的方法,不得不说看了代码之后确实被惊艳到了,亏我之前面试还因为做这个功能做太慢而拖了后腿.在此记录下代码: <!DOCTYPE html> < ...
- iOS 性能优化套路
*** 一级套路 *** 使用ARC管理内存- 防止内存泄露- 保证释放掉不再需要的内存,提高性能 在正确的地方使用 reuseIdentifier平时接触的需要考虑重用的视图有UICollect ...
- 基于ASP.Net Core学习Docker技术第一步:在CentOS7安装Docker平台
Docker技术几年前就火了,伴随着今年来devops的流行,这项技术一直被技术社区追捧.提起Docker很容易被默认为是Linux平台下的技术,.NET的技术跟他似乎没有沾边,不过那是对非.NET ...
- nodejs使用sequelize操作mysql实例
sequelize是node操作mysql的一款npm包,包含很多特性:数据库模型映射.事务处理.模型属性校验.关联映射等,花了两天时间学习了下基本的一些操作,特别是关联映射部分的操作,包含1:1.1 ...
- android 加载图片框架--Glide使用详解
一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...