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. Python3 tkinter基础 Canvas create_rectangle 画矩形

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. Spring Security原理与应用

    Spring Security是什么 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置 ...

  3. sql 之 INSERT IGNORE

    INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据.这样就可以保留 ...

  4. 《开始使用Linux》单元测验 1

    C语言编写的应用程序,通过printf打印一个换行符\n,但在终端上执行的是回车加换行\r\n,把换行符替换为回车换行是由下面哪个软件模块完成的? Linux内核中的行律模块 下面哪个命令可以获得ma ...

  5. 原生js仿jquery一些常用方法

    原生js仿jquery一些常用方法 下面小编就为大家带来一篇原生js仿jquery一些常用方法(必看篇).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   最近迷上了原 ...

  6. ECharts配置项之title(标题)

    1.标题居中 //left的值为'left', 'center', 'right' title:{ left:'center' } 2.主副标题之间的间距 title:{ //默认为10 itemGa ...

  7. 动态拼接SQL 语句

    public T Get<T>(int id) { Type type = typeof(T); string columnStrings = string.Join(",&qu ...

  8. SPOJ QTREE Query on a tree 树链剖分+线段树

    题目链接:http://www.spoj.com/problems/QTREE/en/ QTREE - Query on a tree #tree You are given a tree (an a ...

  9. python 排序 由大到小

    import functools class Solution: # @param {integer[]} nums # @return {string} def largestNumber(self ...

  10. adb shell命令后出现error: device not found错误提示

    在cmd中输入adb shell进入linux shell环境前,需要把android模拟器打开(本文都是针对模拟器而言,并非真机).如果启动好了模拟器,且输入adb shell命令后出现error: ...