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>

浙公网安备 33010602011771号