Flask 源码阅读记录(一)
为深入学习flask,必须要从源码去拆轮子。最简单的一个flask应用是:
from flask import Flask
app=Flask(__name__)
所以先从了解这个Flask类开始。
Flask定义在app.py文件:
class Flask(_PackageBoundObject):
...
这个_PackageBoundObject不知是什么,跳转去看看:
_PackageBoundObject有以下方法:
def __init__(self, import_name, template_folder=None)def _get_static_folder(self)def _set_static_folder(self, value)def _get_static_url_path(self)def _set_static_url_path(self, value)def has_static_folder(self)def jinja_loader(self)def get_send_file_max_age(self, filename)def send_static_file(self, filename)def open_resource(self, resource, mode='rb')这个类主要的作用是加载包,获取和设置html,css等文件的路径,加载Jinjia2,然后发送给浏览器。其中有个语法值得学习:
def _get_static_folder(self):
if self._static_folder is not None:
return os.path.join(self.root_path, self._static_folder)
def _set_static_folder(self, value):
self._static_folder = value
static_folder = property(_get_static_folder, _set_static_folder)#property第一个参数获得属性方法,第二个设置属性方法
del _get_static_folder, _set_static_folder
通过property()函数,get和set方法都可以通过:
c=class _PackageBoundObject()
c.static_folder
来获取和修改。关于Jinjia的先忽略,返回app.py。
本文是Flask源码阅读的第一部分,作者从一个简单的Flask应用出发,开始探讨Flask类的实现。重点介绍了_PackageBoundObject类,它的主要功能包括加载资源路径、集成Jinja2模板引擎,并通过property()函数实现属性的get和set操作。后续内容将逐步展开对Flask更深入的理解。
2万+

被折叠的 条评论
为什么被折叠?



