【四】Flask入门从入门到不放弃来做一些更深入的补充

高清无码pdf见
链接:https://pan.baidu.com/s/1Dpg3G44Ytp5EwGg9CuoI3g
提取码:gc22
按照惯例先来插入封面

前情回顾
在前三期的内容中我们分别介绍了以下内容
【一】如何用Python Flask来制作第一个Web程序
这一期我们安装了Python Flask框架并且第一次运行了一个web程序
并且说明了修改端口号和监听地址的方法
【二】Flask 中的路由
这一期我们讲了怎么在程序中来构造多个访问路径,并且说了调试模式的启动方法
【三】Flask 中模板的简单应用
这一期我们简单介绍了一下flask中使用的jinja2模板的语法和使用场景
现在你可以来构造一个web应用了
但是只会以上这些是完全不够的
下面我们就来对以上的内容来一次Plus版本的补充
第一个问题,什么是Flask扩展
举个大大的"栗子"来解释一下下吧
假设Flask框架是一辆车,这辆车非常的捡漏,但是他还是具备正常的行驶功能的
什么是Flask扩展呢?
扩展就相当于车上的各种配件
你可以用这些配件来完善这辆车的各种功能
你可以很自由的选择你要用的扩展,当然你也可以不使用
附上灵魂插画

扩展是围绕Flask作为核心来编写的,所以说大部分扩展只能用在Flask中
大部分的扩展用来集成其他库,作为Flask与其他库之间薄薄的一层胶水
因为Flask扩展的编写有一些约定,所以初始化的过程大致 相似。大部分扩展都会提供一个扩展类,实例化这个类,并传入我们创 建的程序实例app作为参数,即可完成初始化过程。通常,扩展会在传 入的程序实例上注册一些处理函数,并加载一些配置。
项目配置
在很多情况下,你需要设置程序的某些行为,这时你就需要使用配置变量。
在Flask中,配置变量就是一些大写形式的Python变量,你也可 以称之为配置参数或配置键。使用统一的配置变量可以避免在程序中以 硬编码的形式设置程序。 在一个项目中,你会用到许多配置:Flask提供的配置,扩展提供的 配置,还有程序特定的配置。和平时使用变量不同,这些配置变量都通 过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的 Config类实际上是字典的子类,所以你可以像操作其他字典一样操作 它。
app.config['DEBUG'] = True
如果你想一下子来设置好多个配置信息你可以使用update()方法
app.config.update(
TESTING=True,
SECRET_KEY='balabala')
你也可以直接取出来一个配置信息
value = app.config['ADMIN_NAME']
URL与端点
在Web程序中,URL无处不在。如果程序中的URL都是以硬编码的 方式写出,那么将会大大降低代码的易用性。比如,当你修改了某个路 由的URL规则,那么程序里对应的URL都要一个一个进行修改。更好的 解决办法是使用Flask提供的url_for()函数获取URL,当路由中定义的 URL规则被修改时,这个函数总会返回正确的URL。
调用url_for()函数时,第一个参数为端点(就是要去到的那个路径)值。在 Flask中,端点用来标记一个视图函数以及对应的URL规则。端点的默认 值为视图函数的名称,至于为什么不直接使用视图函数名,而要引入端 点这个概念,我们会在后面了解。
加入我们有一个这样的视图函数
@app.route('/hello/<name>')
def greet(name):
return 'Hello %s!' % name
那我们就可以使用这样的语句来生成去到他的路径,name及后面所带的参数
url_for('say_hello',name='Jack')
我们使用url_for()函数生成的URL是相对URL(即内部URL), 即URL中的path部分,比如“/hello”,不包含根URL。相对URL只能在程 序内部使用。如果你想要生成供外部使用的绝对URL,可以在使用 url_for()函数时,将_external参数设为True,这会生成完整的URL,
Flask 命令
有诶有想过,为什么我们执行flask run
就会启动一个flask服务器呢?
下面你就会知道答案了
除了Flask内置的flask run等命令,我们也可以自定义命令。在虚拟 环境安装Flask后,包含许多内置命令的flask脚本就可以使用了。在前面 我们已经接触了很多flask命令,比如运行服务器的flask run,启动shell 的flask shell。
通过创建任意一个函数,并为其添加app.cli.command()
装饰器, 我们就可以注册一个flask命令
@app.cli.command()
def hello():
click.echo('Hello, Human!')
函数的名称即为命令名称,这里注册的命令即hello
,你可以使用 flask hello命令来触发函数。作为替代,你也可以在app.cli.command()
装饰器中传入参数来设置命令名称,比如app.cli.command('say-hello')
会把命令名称设置为say-hello
,完整的命令即flask say-hello
。
借助click模块的echo()
函数,我们可以在命令行界面输出字符。 命令函数的文档字符串则会作为帮助信息显示(flask hello--help
)。在 命令行下执行flask hello
命令就会触发这个hello()
函数:
模板与静态文件
在第三期的时候我们介绍了Jinja2模板的使用,
我们 需要模板(template)和静态文件(static file)来生成更加丰富的网页。 模板即包含程序页面的HTML文件,静态文件则是需要在HTML文件中 加载的CSS和JavaScript文件,以及图片、字体文件等资源文件。默认情 况下,模板文件存放在项目根目录中的templates文件夹中,静态文件存 放在static文件夹下,这两个文件夹需要和包含程序实例的模块处于同一 个目录下,对应的项目结构示例如下所示:
helloflask/
- templates/
- static/
- app.py
我们把需要用到的js文件和css文件放到static文件夹
那现在如何引用这些文件呢
为了在HTML文件中引用静态文件,我们需要使用url_for()函数 获取静态文件的URL。Flask内置了用于获取静态文件的视图函数,端点 值为static,它的默认URL规则为/static/,URL变量 filename是相对于static文件夹根目录的文件路径。
<img src="{{ url_for('static', filename='avatar.jpg') }}" width="50">
引入一个css
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename= 'styles.css' ) }}">
或者引入静态的Bootstrap资源
<script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script><script src="{{ url_for('static', filename='js/popper.min.js') }}"></script><script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
这一期就先到这里