django的FBV和CBV
title: python djano CBV FBV
tags: python, djano, CBV, FBV
grammar_cjkRuby: true
python django的function的定义方法
在处理URL的调用方法的function里面,可能会这样定义
Fuction Based View
在视图中用函数来处理请求
def get():
if method == "GET":
XXX
def post():
if method == "POST":
XXX
classes Based view
在视图中用类来处理
必须要引入django的view类
在CBV的方式下,请求的步骤是
- 请求先被发给dispatch方法
- 如果子类中没有实现dispatch方法,则去找父类的这个方法
- 该方法中通过获取request.method的请求方式,通过反射的方式实现各种请求的处理
我们可以看看父类的dispatch方法的实现
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed) #获取方法的小写形式,通过反射的方式进行返回
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
所以在自定义get post这些类方法的时候,需要post get都是小写的,因为父类的dispatch已经定义了会去寻找对应的小写的post get方法名
注意CBV必须用as_views()方法处理请求
要用as_views方法必须引入from django import views下面看一个简单用CBV的方式写的处理用户登陆的例子
为了证明dispatch方法可以处理分发用户的请求,我们可以看到在例子中,用了父类的dispatch方法处理用户的请求,并分别在请求分发前后做了打印
#coding:utf-8
from django.shortcuts import render
from django.shortcuts import redirect
from django import views
from app01 import models
class Login(views.View):
def dispatch(self, request, *args, **kwargs):
print "before dispatch"
rep = super(Login, self).dispatch(request, *args, **kwargs)
print "after dispatch"
return rep
def post(self, request):
# models.Administrator.objects.create(username = "root", password =
# "123123")
msg = ''
print 'start...'
print request.method
username = request.POST.get('username')
password = request.POST.get('password')
c = models.Administrator.objects.filter(username = username,
password = password).count()
d = models.Administrator.objects.filter(username = username,
password = password)
if c:
rep = redirect('/index.html')
rep.set_cookie('username', username, max_age = 20, httponly =
True)
rep.set_signed_cookie('email', "aaabbb", httponly = True)
return rep
else:
msg = "用户名密码有错误"
return render(request, "login.html", {'msg': msg})
def get(self, request, *args, **kargs):
return render(request, 'login.html')
用类的方式编写处理get post,即用CBV的方法处理,可以更好的组织程序,使程序看起来更简洁清晰
django的FBV和CBV的更多相关文章
- Django之FBV与CBV
一.FBV与CBV FBV(function based views),即基于函数的视图:CBV(class based views),即基于类的视图,也是基于对象的视图.当看到这个解释时,我是很萌的 ...
- django的FBV和CBV的装饰器例子
备忘 def auth(func): def inner(request,*args,**kwargs): u = request.COOKIES.get('username111') if not ...
- Django之FBV和CBV的用法
FBV FBV,即 func base views,函数视图,在视图里使用函数处理请求. 以用户注册代码为例, 使用两个函数完成注册 初级注册代码 def register(request): &qu ...
- Django的FBV和CB
Django的FBV和CBV FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV C ...
- django请求生命周期,FBV和CBV,ORM拾遗,Git
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...
- django——FBV与CBV
引言 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class bas ...
- python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)
一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...
- django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件
一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用 {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...
- django中的FBV和CBV
django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...
随机推荐
- 浅析git
git是什么 简单来说,Git,它是一个快速的 分布式版本控制系统 (Distributed Version Control System,简称 DVCS) . 同传统的 集中式版本控制系统 (Cen ...
- Oracle用户、授权、角色管理
创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...
- Java虚拟机系列-Java类加载机制
原文:http://www.ityouknow.com/jvm/2017/08/19/class-loading-principle.html 一. 类加载: 1. 将.class文件的二进制数据加载 ...
- 关于del命令
del命令用于删除具体的文件,但是删除文件的时候如果不指定文件的扩展名就会显示找不到文件 还有如果所要删除文件的文件名中含有空格的话该命令会自动识别为几个文件,就从空格处把文件 分成几份,然后就会显示 ...
- python第二篇博客,关于数据类型的详细讲解
数据,就是我们要存储的信息,因为信心种类很多,所以,数据种类也有很多 数字类型数据 整数int 表示年龄,手机号等等 浮点型float 表示身高,工资等带有小数点的数据 字符串类型数据 用来做描述性信 ...
- git远程提交失败
同步仓库并解决403报错 这时候对本地仓库和github进行同步 # git push -u origin master error: The requested URL returned error ...
- Effective Java 第三版——37. 使用EnumMap替代序数索引
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- [JLOI2014] 松鼠的新家
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...
- 前端的UI设计与交互之数据录入篇
数据录入是获取对象信息的重要交互方式,用户会频繁的增加.修改或删除信息.多种多样的文本录入和选择录入方式帮助用户更加清晰和高效的完成这项体验.设计者应当注意这几点:为初级用户/偶尔访问的用户提供简单易 ...
- django初探-创建简单的博客系统(二)
上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...