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>
 
总结:
  两种模式都可以使用,没有哪个好和不好的说法,每种模式存在必有一定的道理,根据项目需求选择相应的模式进行开发。
posted @ 2018-10-09 09:20  LuckyZLi  阅读(263)  评论(0编辑  收藏  举报