首页 > 其他 > 详细

Django框架架构模式及视图编码方式(FBV,CBV)

时间:2020-02-13 00:54:57      阅读:136      评论:0      收藏:0      [点我收藏+]

MVC架构模式

1、定义:MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

2、原理:

  技术分享图片

 

 

 

3、MVC

  M:模型(model),程序需要操作的数据或信息。

  V:视图(view),提供给用户的操作界面

  C:控制器(controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。

 

Django架构模式——MTV

1、与MVC之间的区别:Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

2、原理

技术分享图片

 

 

 3、MTV

  M:模型(model),负责业务对象与数据库的对象(ORM)。

  T:模板(html),负责为用户提供操作界面。

  V:视图(view),负责业务逻辑,并在适当的时候调用Model和Template

FBV与CBV

1、定义

  FBV:function based view,即基于函数的视图函数。

  CBV:class based view,即基于类的视图函数。

2、使用

以登录函数为例:

FBV

urls.py

urlpatterns = [
    url(r^login/, views.login, name=login),
]

views.py

def login(request):
    if request.method == POST: # POST请求逻辑代码
        username = request.POST.get(username)
        password = request.POST.get(password)
        code = request.POST.get(code)
        user = User.objects.filter(username=username, password=password)
        if user and code.upper() == request.session.get(code).upper():
            request.session[login] = 1
            request.session[username] = user.first().name
            return HttpResponse(登录成功!)
    return render(request, login.html) # get请求逻辑代码

CBV

urls.py

urlpatterns = [
    url(r^login/,views.Login.as_view(),name=login)
]

view.py

from django.views import View

class Login(View): def get(self, request): # get请求 return render(request, login.html) def post(self, request): # post请求 username = request.POST.get(username) password = request.POST.get(password) code = request.POST.get(code) user = User.objects.filter(username=username, password=password) if user and code.upper() == request.session.get(code).upper(): request.session[login] = 1 request.session[username] = user.first().name return HttpResponse(登录成功!)

CBV中的as_views流程

技术分享图片

 

 

 技术分享图片

 

 

 技术分享图片

 

 

 

技术分享图片

 

 

 总结:

1. 程序加载的时候,执行urls.py文件中的类名.as_view():
  定义了as_view()中view函数,并且返回了view函数变量

2. 请求到来时,执行view函数:
  1. 实例化对象 ——> self
  2. self.request = request
  3. 执行self.dispatch(request, *args, **kwargs)
    1. 判断请求方式是否被允许:
      1. 允许: 通过反射获取请求方式对应的方法(get/post) ——> handler
      2. 不允许:self.http_method_not_allowed ——> handler
    2. 执行handler,将它的结果返回

CBV上加装饰器的三种方法

from django.utils.decorators import method_decorator # 给CBV添加装饰器
#① 加在方法上
@method_decorator(login_required)
def get(self, request, *args, **kwargs):

#② 加在dispatch方法上
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
    ret = super().dispatch(request, *args, **kwargs)
    return ret

#③ 加在类上
@method_decorator(login_required,name=dispatch)  # 推荐这种
class Addpublisher(View)


@method_decorator(login_required,name=post)
@method_decorator(login_required,name=get)
class Addpublisher(View)

 

Django框架架构模式及视图编码方式(FBV,CBV)

原文:https://www.cnblogs.com/kindvampire/p/12301881.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!