zoukankan      html  css  js  c++  java
  • 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>
     
    总结:
      两种模式都可以使用,没有哪个好和不好的说法,每种模式存在必有一定的道理,根据项目需求选择相应的模式进行开发。
  • 相关阅读:
    硬件重定向
    ARM处理器模式切换(含MRS,MSR指令)
    ARM处理器工作模式
    ARM处理器异常处理
    JS和H5做一个音乐播放器,附带源码
    php页面zend加密乱码的解决办法
    ZendOptimizer怎么安装?Php网站打开显示乱码
    PHP和Python如何选择?或许可以考虑这三个问题
    SQL Server 2008读书笔记(3):表
    Dijkstra算法
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/9758459.html
Copyright © 2011-2022 走看看