FBV视图函数和CBV视图类

FBV视图函数

FBV(function base views) 就是在视图里使用函数处理请求,面向过程式的编程,

CBV视图类

#urls.py路由写法,其中views.login.as_view()中的login值得是处理这个路径相关请求的视图类
url(r'^login/', views.login.as_view()),

from django.views import View

#请求login路径时执行的类
class login(View):
    #重构父类View类的dispatch方法可以在处理请求之前和请求完成之后,添加一些处理的逻辑,
    #父类View的dispatch方法查看请求的类型,然后通过反射来调用本类中的对应函数,来处理请求
    #如果没有找到请求方式对应的函数,就会执行父类中dispatch的第三个参数,也就是报错
    def dispatch(self, request, *args, **kwargs):
        print(f'{request.method}请求来了')
        ret = super().dispatch(request, *args, **kwargs)
        print('逻辑处理完成')
        return ret
    #如果是处理GET请求就直接定义get方法,父类View中的dispatch方法通过反射的方式来获取get函数来处理GET请求
    def get(self, request):
        print('111')
        return render(request, 'login.html')
    #如果是处理POST请求就直接定义get方法,父类View中的dispatch方法通过反射的方式来获取POST函数来处理GET请求
    def post(self, request):
        print('222')
        return HttpResponse('登陆成功')

#请求home路径时执行的类
class home(View):
    def get(self, request):
        return render(request, 'home.html')

    def post(self, request):
        return HttpResponse('登陆成功')

#视图类的源码流程:
views.Addclass.as_view()
1.程序加载,执行Addclass的类方法as_view
    在本类中未找到,由于该类继承了View,因此去父类找找看,发现存在
2.调用父类as_view的类方法(@classonlymethod)-->cls为Addclass
该方法返回重点实现任务:
    1.定义了view方法
    2.并返回view
    请求到来时,执行下面操作
    3.结果变成执行view
    4.view的执行结果就是views.Addclass.as_view()的执行结果

3.调用View的view方法
    1.self = cls(**initkwargs)因此self为Addclass类
    2.该函数返回self.dispatch(request, *args, **kwargs)
    3.需要先执行dispatch,并把执行结果返回给view函数

4.执行View的dispatch方法
    1.获取request.method请求方式
    2.通过字符串的方式getattr(Addclass,'get')赋值给handler
    3.若不存在则返回报错信息给handler
    4.执行handler-->相当于执行get(request,*args,**kwargs)
    5.把结果return给view

视图类加装饰器

from django.views import View
#如果要给视图类添加装饰器就要使用method_decorator这个方法
from django.utils.decorators import method_decorator

# 方式一:类装饰器,不常用
@method_decorator(func, name='get')  # 给类中的某个方法添加装饰器,只能指向一个方法,
@method_decorator(func, name='post')  # 如果要加多个,就再加一个装饰器,指向这个方法,
class login(View):

    # 方式二:给dispatch添加装饰器,在请求处理之前和处理之后添加一些逻辑.
    @method_decorator(func)
    def dispatch(self, request, *args, **kwargs):
        print(f'{request.method}请求来了')
        ret = super().dispatch(request, *args, **kwargs)
        print('逻辑处理完成')
        return ret

    # 方式三:给执行的请求方式添加一个装饰器,在处理这个请求的时候,添加一些逻辑
    @method_decorator(func)
    def get(self, request):
        print('111')
        return render(request, 'login.html')

    def post(self, request):
        print('222')
        return HttpResponse('登陆成功')

原文地址:https://www.cnblogs.com/luckinlee/p/11622233.html

时间: 2024-07-30 06:10:33

FBV视图函数和CBV视图类的相关文章

views 视图函数

视图 1. CBV和FBV FBV (function based view) CBV (class based view ) CBV写法: from django.views import View class AddPublisher(View): def get(self, request): print('这个是get') return render(request, 'add_publisher.html') def post(self, request): print('这个是pos

Django基础三之视图函数

Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项

view 视图函数

一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.除此之外没有更多的要求了——可以说“没有什么神奇的地方”.为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的

视图函数

视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你的Python目录下面.除此之外没有更多的要求了——可以说“没有什么神奇的地方”.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中. 一.视图函数 一定包含两个对象:

03.Django基础三之视图函数

一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.除此之外没有更多的要求了--可以说"没有什么神奇的地方".为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为view

Django路由配置系统、视图函数

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. ''' urlpatterns = [ url(正则表达式, views视图函数,参数,别名),] 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 可选的要传递给视图函数的默认参数(字典形式) 一个可选的name参数 ''' 1.UR

Django - - - -视图层之视图函数(views)

阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 1.HttpRequest 2.HttpResponse 1.render 函数 2.redirect 函数 对比render与redirect: 回到顶部(go to top) 视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.

stark组件开发之提取公共视图函数

 路由问题, 已经解决! 然后就是视图函数的问题了: 不想重复写的解决途径就是, python  类的继承了! 写一个基类, 基类定义 增删改查. 然后其他的,全部去继承他! from django.urls import path, re_path from django.http import HttpResponse, JsonResponse from django.shortcuts import render, redirect, reverse from app01 import

Django之views.py视图函数学习

视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一个简单的视图: 下面是一个以HTML文档的形式返回当前日期和时间的视图: views.py 1 from django.http import HttpResponse 2 3 import datetime 4 5 def current_datetime(request): 6 7 now =