CBV源码

  1. # 切入点
  2. url(r'^login/', views.Mylogin.as_view())
  3. '''类名点名字还加括号 名字要么是绑定给类的方法 要么是无参函数'''

  4. 1.as_view()绑定给类的方法
  5. @classonlymethod
  6. def as_view(cls, **initkwargs)
  7. 2.CBV路由匹配本质与FBV一致
  8. # CBV
  9. url(r'^login/', views.Mylogin.as_view())
  10. # CBV本质
  11. # url(r'^login/', views.view)
  12. 3.匹配成功之后执行view函数代码
  13. def view(request, *args, **kwargs):
  14. self = cls(**initkwargs)
  15. return self.dispatch(request, *args, **kwargs)
  16. 4.查看dispatch方法(对象查找属性和方法一定要严格按照顺序来)
  17. def dispatch(self, request, *args, **kwargs):
  18. # 判断当前请求方法是否符合八个默认的请求方法中
  19. # 1.get
  20. if request.method.lower() in self.http_method_names:
  21. # getattr(对象,'get','拿不到的报错信息') >>> Mylogin里面的get方法
  22. handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  23. else:
  24. handler = self.http_method_not_allowed
  25. return handler(request, *args, **kwargs) # get(request,...)


settings源码

  1. django有两个配置文件
  2. 一个是暴露给用户自定义的配置
  3. 一个是项目默认的配置
  4. 用户没有配置的情况下使用的是项目默认的配置
  5. 用户配置了的情况下则使用用户配置的

  6. 如何实现
  7. 先读取项目默认配置
  8. 再读取自定义配置
  9. # 字典的键存在则替换 不存在则创建
  10.  
  11. from django.conf import settings

  12. class LazySettings(...):
  13. def _setup(self, name=None):
  14. settings_module = os.environ.get(ENVIRONMENT_VARIABLE) # 'day53.settings'
  15. self._wrapped = Settings(settings_module) # Settings('day53.settings')
  16.  
  17. class Settings(object):
  18. def __init__(self, settings_module): # 'day53.settings'
  19. for setting in dir(global_settings): # 获取全局配置文件可以点的变量名
  20. if setting.isupper(): # 校验配置必须全大写
  21. setattr(self, setting, getattr(global_settings, setting))
  22. # setting指代的是所有全大写的变量名
  23. # getattr(global_settings, setting)获取全大写变量名对应的值
  24. # 给对象设置属性 可以简单的理解为 给字典添加键值对
  25. self.SETTINGS_MODULE = settings_module # 'day53.settings'
  26. mod = importlib.import_module(self.SETTINGS_MODULE)
  27. settings = LazySettings(...)
  28. for setting in dir(mod): # 获取
  29. if setting.isupper():
  30. setting_value = getattr(mod, setting)
  31. setattr(self, setting, setting_value)

小结

  将用户不常改变的配置成隐藏文件,将修改频繁配置设为暴露文件,再通过优先级效果,实现更好的用户体验

  以及插拔式设计


  1.  

09:CBV与settings的更多相关文章

  1. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  2. 潭州课堂25班:Ph201805201 tornado 项目 第一课 项目介绍和创建 (课堂笔记)

    tornado 相关说明 , 查找 python3 的路径: binbin@abc:~$ which python3/usr/bin/python3 创建虚拟环境 : 创建工程; 用 pycharm ...

  3. django开发项目实例1--建立一个项目并初步运行

    1:进入目标目录新建一个项目 D:\>django-admin.py startproject qiweijie 新建完成后,进入项目文件夹查看目录 D:\>cd qiweijie D:\ ...

  4. django初步了解3

    目录 JsonResponse模块 form表单上传文件 FBV与CBV django settings源码分析及实际应用 模板语法 模板传值 模板过滤器 标签 if标签 for标签 with标签 自 ...

  5. Django框架09 /ajax、crsf、settings导入

    Django框架09 /ajax.crsf.settings导入 目录 Django框架09 /ajax.crsf.settings导入 1. ajax概述 2. ajax应用 3. ajax上传文件 ...

  6. python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统

    一.FBV和CBV1.基于函数的view,就叫FBV(Function Based View) 示例: def add_book(request): pub_obj=models.Publisher. ...

  7. django请求生命周期,FBV和CBV,ORM拾遗,Git

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...

  8. python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...

  9. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)

    摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...

随机推荐

  1. [LeetCode每日一题]88. 合并两个有序数组

    [LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...

  2. Java 给Word添加数字签名

    本文以Java程序代码为例,介绍如何给Word文档添加数字签名. 程序运行环境 IntedliJ IDEA JDK 1.8.0 Jar包:spire.doc.jar 4.5.1 Word文档:.doc ...

  3. opencv——几何变换原理与实现

    摘要 图像几何变换又称为图像空间变换, 它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置.几何变换不改变图像的像素值, 只是在图像平面上进行像素的重新安排. 几何变换大致分为仿射变换.投影变换. ...

  4. MySQL5.7升级到8.0过程详解

    前言: 不知不觉,MySQL8.0已经发布好多个GA小版本了.目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了.本篇文章主要介绍从 ...

  5. where优先级

    select name from emply where id >5; 先找表from emply 再找条件 where id >5 最后打印 你想打印的字段 可以把select看成打印 ...

  6. Swagger简明教程

    一.什么是swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法, ...

  7. [bug] kibana:prevMsg":"Request Timeout after 3000ms

    ES启动问题,内存不足 https://blog.csdn.net/qq_40907977/article/details/104499178 修改ES启动内存 https://blog.csdn.n ...

  8. 什么是CPU缓存

    一.什么是CPU缓存 1. CPU缓存的来历 众所周知,CPU是计算机的大脑,它负责执行程序的指令,而内存负责存数据, 包括程序自身的数据.在很多年前,CPU的频率与内存总线的频率在同一层面上.内存的 ...

  9. 工作流引擎详解!工作流开源框架ACtiviti的详细配置以及安装和使用

    创建ProcessEngine Activiti流程引擎的配置文件是名为activiti.cfg.xml的XML文件.注意与使用Spring方式创建流程引擎是不一样的 使用org.activiti.e ...

  10. java 计算下面级数之和 1/3+3/5+5/7+...+97/99

    代码实例图:package judgment;/** * 计算下面级数之和 * 1/3+3/5+5/7+...+97/99; */public class Judgment { public stat ...