码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-30 23:15:11      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:direct   rom   包含   pos   elf   put   自定义   ==   username   

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模式的区别

标签:direct   rom   包含   pos   elf   put   自定义   ==   username   

原文地址:https://www.cnblogs.com/xiamaojjie/p/12601815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!