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模式的区别的主要内容,如果未能解决你的问题,请参考以下文章