django:cbv模式和fbv模式的区别

Posted xiamaojjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django:cbv模式和fbv模式的区别相关的知识,希望对你有一定的参考价值。

cbv(class base view)模式是用面向对象的方式去写的,fbv(function base view)是用面向过程的方式去写的。下面以登录接口作为例子做比较:

共同的html页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>登陆接口</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h3 align="center">登录页面</h3>
<p align="center">{{ new_time }}</p>
<form action="" method="post">
       <table  align="center">
          <tr>
             <td>用户名</td>

             <td>
                <input type="text" name="username" />
            </td>
          </tr>
          <tr>
             <td>密码</td>
             <td>
                <input type="text" name="password"/>
            </td>
           <p style="color: red" align="center">
                {{msg}}
          </p>
          <tr>
             <td>
                <input type="submit" value="登录">
             </td>

          </tr>
        </table>
</form>
</body>
</html>

 

cbv模式:

编写的view视图如下:自定义的类需要继承View父类

from django.views import View

class CbvLogin(View):
    ‘‘‘CBV模式‘‘‘
    def get(self,request):
        return render(request,"login.html",context={"new_time": new_time})

    def post(self,request):
        username = request.POST.get("username")
        password = request.POST.get("password")
        print("用户名:{},密码:{}".format(username, password))
        #  todo user认证成功返回对象,认证失败返回空
        user = authenticate(username=username,
                            password=password)
        if user:
            if user.is_active:  # 判断用户是否有效,获取表里面的is_active这个属性
                login(request, user=user)  # 登录,user对象里面包含用户名和密码
                request.session["user"] = username  # 加session
                request.session.set_expiry(None)  # 设置session有效期:0为关闭浏览器马上失效,none为永久
                result = {"code": 0,
                          "msg": "login success!",
                          "data": {"username": username,
                                   "password": password,
                                   }
                          }
                return HttpResponseRedirect("/info/")

        else:
            return render(request, "login.html", context={"msg": "用户名或密码错误"})

urls路由配置:

如图:需要加as_view()

技术图片

fbv模式:

编写的view视图如下:

def login_auth(request):
    if request.method == "GET":
        return render(request, "login.html", context={"new_time": new_time})
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        print("用户名:{},密码:{}".format(username, password))
        #  todo user认证成功返回对象,认证失败返回空
        user = authenticate(username=username,
                            password=password)
        if user:
            if user.is_active:  # 判断用户是否有效,获取表里面的is_active这个属性
                login(request, user=user)  # 登录,user对象里面包含用户名和密码
                request.session["user"] = username  # 加session
                request.session.set_expiry(None)  # 设置session有效期:0为关闭浏览器马上失效,none为永久
                result = {"code": 0,
                          "msg": "login success!",
                          "data": {"username": username,
                                   "password": password,
                                   }
                          }
                # return JsonResponse(result)
                return HttpResponseRedirect("/info/")
        # if user:
        #     if user.is_active:
        #         response = HttpResponseRedirect("/info/")   # 设置cookie信息,名字是user,值是123456
        #         response.set_cookie("user",password)       # todo 设置cookie
        #         return response


        else:
            return render(request, "login.html", context={"msg": "用户名或密码错误"})

urls路由配置:

如图:

技术图片

总结:

语法上cbv定义类必须需要继承View父类,urls路由配置cbv需要加as_view()。而fbv则不需要这些。

模式:一个面向对象的写法,一个面向过程。

技术图片

以上是关于django:cbv模式和fbv模式的区别的主要内容,如果未能解决你的问题,请参考以下文章

django补充CBV和FBV模式

Django中请求的生命周期 和 FBV模式和CBV模式

Django视图函数之FBV与CBV模式

python测试开发django-73.django视图 CBV 和 FBV

Django之请求生命周期及FBV/CBV模式

django form表单组建使用及CBV模式