flask的核心程序就两个:
- werkzegu(WSGI)库,封装了http、web通信等最关键的wsgi功能②Jinja2是Python下一个被广泛应用的模版引擎,方便了html模板的创建和使用
- 而继承自werkzegu库的flask,web应用最核心的就是Flask类,这个类创建一个实例,作为整个web的后台程序主体。
核心Flask实例的使用:
- 在app/__init__.py模块中,我们按照官网示例初始化一个实例
from flask import Flask appweb = Flask(__name__)
- 实际使用中的探究:
-
- 在实际使用中,发现,在web前端预览图片等操作,是直接在html或js中加入一个链接,就可以直接访问到图片等我们保存在后台中的资源,那么问题就出现了,这些没有任何逻辑和判断就可以畅通无阻地访问我们的静态资源文件,在不考虑nginx,uwsgi等服务器server程序的保护作用下,网站资源就像直接暴露在用户面前。那么安全性何言?
- 通过更近一步的探究,我思考到,这些图片等静态资源,能够被用户通过图片url链接等方式直接访问,相当于是被允许暴露在用户面前,不处于web应用的保护下,但是整个后台的所有文件和代码文件,只有这个static中的前端文件被暴露出去(static中有css,image,js代码,这些都可以被直接写个链接在html中让用户使用),说明这个static是被暴露的文件夹
- 那么,哪一个文件夹被暴露,一定是被web应用程序所决定,我们通过查询源码,就发现,Flask实例的创建的时候,是可以指定哪个文件夹是静态资源文件夹(一般是static文件夹,名字也可以任取),决定了暴露的文件夹。
- 贴源码:
def __init__(self,import_name,static_path=None,static_url_path=None,static_folder='static',
template_folder='template',instance_path=None,instance_relative_config=False,
root_path=None): - 通过Flask初始化方法可以看出,可以给static_folder参数赋值,赋值名称就是静态资源文件夹名称,再细看深究源码,文件夹名称通过werkzegu库处理,被指定成为静态资源文件夹,更进一步werkzegu是如何让某个文件夹可以被直接访问,静态资源文件夹是如何实现的,需再看werkzegu的源码,日后再写。