欢迎光临散文网 会员登陆 & 注册

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

2020-03-31 15:20 作者:热心的裴同学  | 我要投稿

高清无码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>

这一期就先到这里


下一次我们一起来研究研究模板的进阶用法





【四】Flask入门从入门到不放弃来做一些更深入的补充的评论 (共 条)

分享到微博请遵守国家法律