Django--FBV + CBV
FBV + CBV
django中请求处理方式有2种:FBV 和 CBV
FBV(function bases views)
就是在视图里使用函数处理请求,如下:
# urls.py
from django.conf.urls import url, include
from app01 import views
urlpatterns = [
url(r'^index/', views.index),
]
# views.py
from django.shortcuts import render
def index(req):
if req.method == 'POST':
print('method is :' + req.method)
elif req.method == 'GET':
print('method is :' + req.method)
return render(req, 'index.html')
注意此处定义的是函数【def index(req):】
<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="A" />
<input type="submit" name="b" value="提交" />
</form>
</body>
</html>
FBV中加装饰器相关
def deco(func):
def wapper(request,*agrs,**kwargs):
if request.COOKIES.get('LOGIN'):
return func(request, *args, **kwargs)
return redirect('/login/')
return wrapper
@deco
def index(req):
if req.method == 'POST':
print('method is :' + req.method)
elif req.method == 'GET':
print('method is :' + req.method)
return render(req, 'index.html')
上面就是FBV的使用。
CBV(class bases views)
就是在视图里使用类处理请求,如下:
# urls.py
from app01 import views
urlpatterns = [
url(r'^index/', views.Index.as_view()),
]
# views.py
from django.views import View
# 类要继承View ,类中函数名必须小写
class Index(View):
def get(self, req):
'''
处理GET请求
'''
print('method is :' + req.method)
return render(req, 'index.html')
def post(self, req):
'''
处理POST请求
'''
print('method is :' + req.method)
return render(req, 'index.html')
CBV中加装饰器相关
要在CBV视图中使用我们上面的check_login装饰器,有以下三种方式:
加在CBV视图的get或post方法上
from django.utils.decorators import method_decorator
from django.views import View class Index(View): def dispatch(self,req,*args,**kwargs):
return super(Index,self).dispatch(req,*args,**kwargs) def get(self, req):
print('method is :' + req.method)
return render(req, 'index.html') @method_decorator(deco)
def post(self, req):
print('method is :' + req.method)
return render(req, 'index.html')加在diapatch方法上,因为CBV中首先执行的就是dispatch方法,所以这么写相当于给get和post方法都加上了登录校验。
from django.utils.decorators import method_decorator
from django.views import View class Index(View): @method_decorator(deco)
def dispatch(self,req,*args,**kwargs):
return super(Index,self).dispatch(req,*args,**kwargs) def get(self, req):
print('method is :' + req.method)
return render(req, 'index.html') def post(self, req):
print('method is :' + req.method)
return render(req, 'index.html')直接加在视图类上,但method_decorator必须传name关键字参数
如果get方法和post方法都需要登录校验的话就写两个装饰器
from django.utils.decorators import method_decorator
from django.views import View @method_decorator(deco,name='get')
@method_decorator(deco,name='post')
class Index(View): def dispatch(self,req,*args,**kwargs):
return super(Index,self).dispatch(req,*args,**kwargs) def get(self, req):
print('method is :' + req.method)
return render(req, 'index.html') def post(self, req):
print('method is :' + req.method)
return render(req, 'index.html')
Django--FBV + CBV的更多相关文章
- Django FBV/CBV、中间件、GIT使用
s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...
- Django FBV CBV以及使用django提供的API接口
FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...
- django FBV +CBV 视图处理方式总结
1.FBV(function base views) 在视图里使用函数处理请求. url: re_path('fbv', views.fbv), # url(r'^fbv' ...
- [oldboy-django][2深入django]FBV + CBV + 装饰器
FBV django CBV & FBV - FBV function basic view a. urls 设置 urls(r'^test.html$', views.test) b. vi ...
- django——FBV与CBV
引言 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class bas ...
- Django的CBV与FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base v ...
- Django的 CBV和FBV
FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...
- Django 之 CBV & FBV
FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...
- Django之CBV和FBV
Django之CBV和FBV CBV和FBV是C和F的区别: C是Class,F是Function 在请求中,有GET请求和POST请求. 在写CBV时,url是可以对应一个类的,在类中,分别写出GE ...
- Django 路由视图FBV/CBV
路由层 url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...
随机推荐
- Tram POJ - 1847
题目链接:https://vjudge.net/problem/POJ-1847 思路:想从A到B使用开关少,想清楚了就是个简单的最短路,可以把不用开开关为权值0, 要开开关为权值1,就是求A到B开开 ...
- pdf的使用遇到的问题
http://blog.csdn.net/atluckstar/article/details/77688972 回答网友提问 2015-7-28 因为好多人问能不能显示中文的问题,我总结大致分为两 ...
- 线程三态和JVM线程状态
1.线程三态:就绪态.运行态.阻塞态 2.JVM中的六种状态 NEW(新建状态):一个尚未启动的线程所处的状态. RUNNABLE(可运行状态):可运行线程的线程状态,可能正在运行,也可能在等待处理器 ...
- matlab-线性回归
1.调用函数regress(Y,X,alpha),plpha是置信度,如果直接用regress(Y,X)则默认置信度为0.05,Y是一个 的列向量,X是一个 的矩阵,其中第一列是全1向量. 2.函数返 ...
- 学习-guava
Guava Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库 例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives sup ...
- Flask常用路由参数
Flask中的路由参数: @app.route(‘/’, endpoint=’xx’ , methods=[‘GET’,...]) >endpoint后的名字,用来反向生成url的.后面的名字随 ...
- STL——list用法总结
头文件 #include<list> 声明一个int型的list:list<int> a: 1.list的构造函数 list<int>a{1,2,3} list&l ...
- 【CSP-S膜你考】我们的可可西里
我们的可可西里 题面 转眼到了2008年的6月9日,盼望已久的高考结束了.我们踏上了向西的旅程(本来是想写西去之路,可是考虑不太妥当).可可西里,多么诱人的名词,充满了奇幻的色彩和自然的淳朴.从可可西 ...
- 【LG3647】[APIO2014]连珠线
[LG3647][APIO2014]连珠线 题面 洛谷 题解 首先考虑一下蓝线连起来的情况,一定是儿子-父亲-另一个儿子或者是儿子-父亲-父亲的父亲. 而因为一开始只有一个点在当前局面上,将一条红边变 ...
- php获取客户端公网ip代码
<?php /*如果是本地服务器获取客户端的ip地址是 127.0.0.1 如果是域名服务器获取客户端的是公网ip地址*/ function get_client_ip() { $ipaddre ...