Django源码学习心得
django吧
全部回复
仅看楼主
level 3
1. 四层架构:GlobalCallbackHandlerClass -> MiddlewareCallbackHandlerClass -> PathCallbackResolverClass -> PathCallbackHandlerClass
2025年12月30日 14点12分 1
level 3
代码设计技巧学习心得
.
1. GlobalCallbackHandlerClass:WSGIHandler类(继承BaseHandler类,且实现了__call__方法)
  1.1 BaseHandler._get_response调用Middleware类
2. MiddlewareCallbackHandlerClass:Middleware类(不需继承基类,但必须定义__init__、__call__魔术方法,且可选地定义process_view、process_exception等钩子函数)
3. PathCallbackResolverClass:URLResolver类
4. PathCallbackHandlerClass:开发者自定义view函数
2025年12月30日 18点12分 2
level 3
代码设计技巧学习心得
.
1. 框架允许开发者自定义函数或类,只要开发者定义的函数或类符合约定即可
2. 框架通过hasattr函数判断开发者自定义类、对象是否具备某指定名称的属性,通过getattr函数指定对象和属性名获取对象的属性值
3. 框架通过callable函数判断参数是否“可调用的”
2025年12月30日 18点12分 3
常见用法:首先hasattr判断对象是否存在指定名字的“处理函数”属性,确定存在后用getattr把该属性取出,最后用callable检测该属性的取值是否可调用的
2025年12月30日 18点12分
level 3
代码设计技巧学习心得
.
1. hasattr、getattr
  1.1 setattr
2. callable
3. isinstance、issubclass
2025年12月30日 19点12分 4
level 3
代码设计技巧学习心得
.
1. 加工点一:开发者提供的view函数是sync的,目标环境是async的。需要实现“sync函数转async”转换
  1.1 sync_to_async函数
2. 加工点二:开发者提供的view函数是async的,目标环境是sync的。需要实现“async函数转sync”转换
  2.1 async_to_sync函数
2025年12月31日 19点12分 5
level 3
代码设计技巧学习心得
.
1. 对PathCallbackHandler函数的调用必须被try-except结构包裹起来,以免Exception导致无法给出HTTP响应
  1.1 except代码块内调用exception_handler函数处理Exception
    1.1.1 Django中的exception_handler是各个Middleware提供的process_exception钩子函数
2025年12月31日 19点12分 6
MiddlewareClass.process_exception抛头露面的时机终于找到了[酷]
2025年12月31日 19点12分
1