Django中的FBV和CBV
1. CBV(class base views)(相对来说操作更加灵活,功能更加丰富)
CBV是采用面向对象的方法写视图文件。
CBV的执行流程:
浏览器向服务器端发送请求,服务器端的urls.py根据请求匹配url,找到要执行的视图类,执行dispatch方法区分出是POST请求还是GET请求,执行views.py对应类中的POST方法或GET方法。
使用实例:
将上述代码中的 urls.py 修改为如下:
from
mytest
import
views
path(
'home/'
,views.Home.as_view()) #这是固定写法
views.py 的代码如下:
from django.views import View
class Home(View):
# 相当于一个装饰器功能,即在进行post/get请求的时候可以附加一些操作(重写dispatch方法)
def dispatch(self, request, *args, **kwargs):
print('Before')
result = super(Home, self).dispatch(request, *args, **kwargs) # 调用父类的dispatch方法
print('After')
return result
def get(self, request):
print(request.method)
return render(request, 'home.html')
def post(self, request):
print(request.method)
return render(request, 'home.html')
2. FBV(function base views)
FBV即在views.py中以函数的形式写视图。
使用实例:
将上述代码中的 urls.py 修改为如下:
from
mytest
import
views
path(
'login/'
,views.login)
views.py 的代码如下:
def login(request):
if request.method == 'GET':
pass
return render(request, 'login.html')
elif request.method == 'POST':
pass
return redirect('/index/')
else:
#PUT, DELETE, HEAD, OPTIONS
pass
return redirect('/index/')
login.html代码如下 :
<!DOCTYPE html>
<html lang
=
"en"
>
<head>
<meta charset
=
"UTF-8"
>
<title>index<
/
title>
<
/
head>
<body>
<form action
=
"/login/
" method="
post">
<
input
type
=
"text"
name
=
"A"
/
>
<
input
type
=
"submit"
name
=
"b"
value
=
"提交"
/
>
<
/
form>
<
/
body>
<
/
html>