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。