django 视图 分为两种

  1.  FBV  基于函数的视图      function   based  view

  2.  CBV  基于类的视图         class   based   view

基于类的视图

CBV :基于 类的视图函数

1、后端逻辑处理时不用通过逻辑,来判断请求方式是get还是post请求
在视图类中,定义了get方法就是写get请求的逻辑,定义类post方法时
就是post请求逻辑。

2、View 的源码分析过程
1.先从url.py 文件的开始分析入手:
 from app01 import views

         urlpatterns = [
path('admin/', admin.site.urls), path('login/', views.LoginView.as_view()), # CBV 基于类的视图
path('index/', views.index), # FBV 基于函数的视图
] 1. #views.LoginView.as_view() 必须是一个视图函数
    2. 点击进入源码
View 大致执行流程:
self.as_view() =====> self.dispatch() ====> self.get/post/等
# 路由分发开始 获取具体的请求方面名,在通过反射具体的请求函数 视图函数
 class  View:

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] def as_view(cls, **initkwargs): def view(request, *args, **kwargs): return self.dispatch(request, *args, **kwargs)
           return view def dispatch(self, request, *args, **kwargs): # self.http_method_names=['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] if request.method.lower() in self.http_method_names:
# 用反射 获取函数 request.method.lower() # 为 get
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
# hander=getattr(self,"get") # 相当于执行了 该类下的get方法
else:
handler = self.http_method_not_allowed #handler(request, *args, **kwargs) ====> get(request,*args, **kwargs) return handler(request, *args, **kwargs) # 相当于类下的 执行 return self.get(request,)
    3. 在view.py 文件中:
      
 from django.view import View

         # CBV 基于类的视图
class LoginView(View): def get(self,request,*args, **kwargs): return render(request,"login.html") def post(self,request,*args, **kwargs): return redirect('/index/') # FBV 基于函数的视图
def index(request): return render(request,"index.html")

django 中基于类的视图的更多相关文章

  1. django缓存基于类的视图

    引子: 有些场景下由于数据库中的数据很长时间内都不会发生变化,如果每次调用view都要去查询一次数据库的话,明显是多做了一些无用 工的:django中可以通过装饰器方便的实现view的缓存. 为什么c ...

  2. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  3. Django REST FrameWork中文教程3:基于类的视图

    我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...

  4. Django 基于类的视图(CBV)执行流程 CBV 源码分析

    一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...

  5. Django——基于类的视图源码分析 一

    基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...

  6. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

  7. Django——基于类的视图(class-based view)

    刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Funcation-based generic vie ...

  8. Django笔记&教程 7-1 基于类的视图(Class-based views)介绍

    Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...

  9. django-rest-framework之基于类的视图

    前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...

随机推荐

  1. git常见使用场景总结

    1.怎么回退到之前的commit? 用git reset --hard HEAD回退到最新提交的版本 用git reset --hard HEAD^回退到上一个版本 用git reset --hard ...

  2. 解决跨域(CORS)问题

    为什么会有跨域问题 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截 解决跨域问题的两种方式 JSONP   推荐参考 CO ...

  3. git使用操作

    git config --system --unset credential.helper 重置git

  4. 日志统计 尺取法【蓝桥杯2018 C/C++ B组】

    标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...

  5. makefile基本操作

    多数内容copy自youtube的一个视频:https://www.youtube.com/watch?v=E1_uuFWibuM 执行环境:原作者是在Linux下做的视频,而我使用的是win10,w ...

  6. FJNU2018低程F jq解救fuls (贪心乱搞)题解

    题目描述 一天fuls被邪恶的"咕咕咕"抓走了,jq为了救fuls可谓是赴汤蹈火,费了九牛二虎之力才找到了"咕咕咕"关押fuls的地方. fuls被关在一个机关 ...

  7. 【做题】agc002D - Stamp Rally——整体二分的技巧

    题意:给出一个无向连通图,有\(n\)个顶点,\(m\)条边.有\(q\)次询问,每次给出\(x,y,z\),最小化从\(x\)和\(y\)开始,总计访问\(z\)个顶点(一个顶点只计算一次),经过的 ...

  8. 自定义Exception:MVC抛出自定义异常,并以Json方式返回

    相关链接 优点: 可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException().页面展示,controller的错误处理方式一样 节省编 ...

  9. No mapping found for HTTP request with URI [/Portal/download] in DispatcherServlet with name 'springmvc'

    本文为博主原创,未经允许不得转载: 遇到这个异常,总结一下这个问题发生的原因: 这个原因是在springmvc中在DispatcherServlet分发请求时,解析不到相应的请求路径.后台要请求的路径 ...

  10. super()、this属性与static静态方法的执行逻辑

    1.super的构造顺序:永远优先构造父类的方法 2.static永远在类实例之前执行,this的使用范围为实例之后