前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask Web 极简教程(二)- Flask 模板(Part A)

Flask Web 极简教程(二)- Flask 模板(Part A)

作者头像
RiemannHypothesis
发布2022-09-26 16:27:34
1.3K0
发布2022-09-26 16:27:34
举报
文章被收录于专栏:Elixir

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

一、Flask 介绍与安装

Flask 是一个使用 Python 实现的 Web 开发微框架,具有丰富的扩展,可以非常方便的继承 Jinja2SQLAlchemyWTF 等扩展。

image.png
image.png

哪些公司使用了 Flask 构建 Web 应用?

image.png
image.png

Flask 安装

pip 安装

在终端下指定使用 Py 3.8 来安装 1.1.2 版本的 Flask。

代码语言:javascript
复制
pip3.8 install flask==1.1.2

使用该命令安装时也可以选择性使用以下属性:

  • --timeout:设置超时时间
  • -i:使用指定的镜像源安装
代码语言:javascript
复制
# 使用清华镜像源安装1.1.2版本的Flask
pip3.8 install flask==1.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

源码安装

使用源码进行安装,进入源码目录下,运行命令

代码语言:javascript
复制
python3 setup.py install

安装完成之后可以通过在终端中运行命令 pip3.8 list

image.png
image.png

或者通过在 Python 代码中导入 Flask 来查看 Flask 版本信息。

image.png
image.png

二、Flask Quickstart

使用PyCharm创建一个Pure Python项目 flask-quickstart,新增一个 Python 脚本 app.py

代码语言:javascript
复制
from flask import Flask

# 创建一个Flask对象/实例
app = Flask(__name__)


@app.route('/hallo')
def hallo():
    return 'Hallo Flask'

if __name__ == '__main__':
    app.run()
  • __name__:表示Flask应用的主模块或者包的名称,Flask使用该参数来确定应用的位置,以此找到应用中其他文件的位置,如模板、静态资源文件等
  • @app.route():装饰器,表示路由配置,用户在浏览器中输入的URI映射到指定的函数

运行该脚本,控制台打印出URL地址

image.png
image.png

在浏览器中输入控制台打印出的地址

image.png
image.png

控制台打印出 hallo() 函数返回的字符串,此时 /hallo 就和 hallo() 函数关联起来了

app.py 中的 hallo() 函数称为视图函数,每个视图函数上可以加多个装饰器,既可以有多个 URI 映射到同一个视图函数上.

hallo() 函数上添加一个 URI

代码语言:javascript
复制
# 其余代码不变

@app.route('/')
@app.route('/hallo')
def hallo():
    return 'Hallo Flask'
    
# 其余代码不变

重新启动脚本,浏览器输入 127.0.0.1:5000

image.png
image.png

"/" 同样也可以映射到hallo()视图函数上

MTV 模型

在app.py同级目录下新建一个 templates 文件夹,增加 hallo.html 页面

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Index</title>
</head>
<body>
<h1>{{info.message}}</h1>
</body>
</html>

修改app.py

代码语言:javascript
复制
from flask import render_template

# 其余代码不变

@app.route('/hallo')
@app.route('/')
def hallo():
    info = {
        'message': "这是存在message变量中的信息"
    }
    return render_template('index.html', info=info)
image.png
image.png

Flask 的 MTV 模型

image.png
image.png
  • V 表示视图 View:负责业务逻辑,对应项目中的视图函数
  • T 表示模板 Template:负责如何把页面展示给用户
  • M 表示模型 Model:与数据库表对应的类

浏览器器发送的请求首先会根据URI地址找到对应的视图函数,视图函数中会处理请求包括获取对进行进行判断,获取请求中的参数,之后会与Model层进行交互,通过ORM框架对数据进行增删改查,并将操作结果保存,Template中会通过模板语法处理视图函数中的数据,之后再有视图函数将Template返回给浏览器进行渲染,最终呈现给用户

视图函数是请求处理的核心,所以视图层是一定存在的,可以没有 Template 或者 Model。

实现 MTV 三层架构的第三方库:

  • 模型Model
    • Flask-PyMongo/Flask-SQLAlchemy
  • 视图View
    • Flask-WTF/Flask-Uploads/
  • 模板Template
    • Jinja2

三、Flask 内置服务器

Flask 推荐的启动方式

flask 1.0 之后就不再推荐使用 main 函数的方式启动 flask 应用了,而是通过设置环境变量运行启动命令的方式来启动Flask应用

代码语言:javascript
复制
# 设置环境变量
set/export FLASK_APP = app.py
# 启动应用
flask run -h 0.0.0.0 -p 8080
# 这条命令也可以设置host和port
flask run --host=0.0.0.0 --port=8080
# 查看更多命令
flask run --help

IDEA 配置 Flask 应用启动方式

image.png
image.png

Flask 应用开启 Debug 模式

Flask应用开启 Debug 模式非常简单,只要通过命令将 FLASK_ENV 设置为 development 即可。

代码语言:javascript
复制
set/export FLASK_ENV=development
flask run

开启调试模式之后,修改代码保存后服务器会自动重启

四、Flask 的扩展

image.png
image.png

由于 Flask 是一个 microframework,除了核心功能外其他模块都需要使用第三方扩展,如 ORM 框架、表单等,这些都可以通过官方网站查找到所需要的第三方扩展。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Flask 介绍与安装
    • Flask 安装
    • 二、Flask Quickstart
      • MTV 模型
      • 三、Flask 内置服务器
        • Flask 推荐的启动方式
          • Flask 应用开启 Debug 模式
          • 四、Flask 的扩展
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档