Flask 快速上手教程 — 了解与基本使用

Flask 快速上手教程 --- 了解与基本使用

这篇博客是我刚接触 flask,研究文档时的一些记录与体会,希望对各位刚接触 flask 的朋友有所帮助。

且在此篇后,我还会另写一篇关于纯后端的 flask 教程,介绍一下如何使用 flask 创建一个较为完善的纯后端的服务。

在阅读下面的内容前,读者应该具有基础的python知识,且配置好了python环境。

安装 flask:

复制代码
pip install flask

一、最小应用

一个基于 flask 的最小应用应当如下:

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"
  1. 首先我们导入了 Flask 类。该类的实例将会成为我们的 WSGI 应用。(WSGI 提供了一个规范,使得不同的 Web 应用程序和服务器可以进行交互,从而实现了在不同环境中运行同一个应用程序的可能性。)

  2. 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。 __name__ 是一个适用于大多数情况的快捷方式。有了这个参数, Flask 才能知道在哪里可以找到模板和静态文件等东西。(__name__: 表示当前模块的名字。如果是主模块(即直接运行的脚本),其值为 __main__

  3. 然后我们使用 route() 装饰器来告诉 Flask 触发函 数的 URL 。

  4. 函数返回需要在用户浏览器中显示的信息。默认的内容类型是 HTML ,因此 字符串中的 HTML 会被浏览器渲染。

把它保存为 hello.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。

可以使用 flask 命令或者 python -m flask 来运行这个应 用。你需要使用 --app 选项告诉 Flask 哪里可以找到应用(如果文件名为 app.py 或者 wsgi.py ,那么不需要使用 --app):

复制代码
flask --app hello run
或
python hello.py

现在在浏览器中打开 http://127.0.0.1:5000/ ,应该可以看到 Hello World! 字样。

如果在使用 flask 命令启动时,还可以添加 --debug 开启调试模式,这样在发生错误的时候,在页面上可以看到错误提示。

二、路由及HTTP方法

1、路由

  1. 基础使用
    flask 中使用@app.route()来配置路由,从上面的例子应该看出,当我们访问对应路由的时候,该配置能将请求交由对应函数进行处理,函数的返回值即为请求的响应值:

    python 复制代码
    @app.route('/')
    def index():
        return 'Index Page'
    
    @app.route('/hello')
    def hello():
        return 'Hello, World'
  2. 路由传参
    有时候参数需要通过路由传递,以CSDN的个人主页为例,不同用户的个人主页的URL不同之处在于路由中最后部分,为了能配置并接收参数,可以在配置路由的时候使用<>表示动态路由参数,并使用函数形参接收:

    python 复制代码
    from markupsafe import escape
    
    @app.route('/user/<username>')
    def show_user_profile(username):
        # show the user profile for that user
        return f'User {escape(username)}'
    
    @app.route('/post/<int:post_id>')
    def show_post(post_id):
        # show the post with the given id, the id is an integer
        return f'Post {post_id}'
    
    @app.route('/path/<path:subpath>')
    def show_subpath(subpath):
        # show the subpath after /path/
        return f'Subpath {escape(subpath)}'

    并且,通过使用 converter:variable_name ,可以选择性的加上一个转换器,为变量指定规则:

  3. URL 构建
    url_for() 函数用于构建指定函数的 URL。它把函数名称作为第 一个参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。 未知变量将添加到 URL 中作为查询参数:

    python 复制代码
    from flask import url_for
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'index'
    
    @app.route('/login')
    def login():
        return 'login'
    
    @app.route('/user/<username>')
    def profile(username):
        return f'{username}\'s profile'
    
    with app.test_request_context():
        print(url_for('index'))
        print(url_for('login'))
        print(url_for('login', next='/'))
        print(url_for('profile', username='John Doe'))

    输出:

    复制代码
    /
    /login
    /login?next=/
    /user/John%20Doe

    多用于使用静态资源文件等。

  4. HTTP方法
    @app.route默认只匹配 GET 请求,而如果想要能够匹配别的HTTP方法,或者多种HTTP方法,则可这么做:

    python 复制代码
    from flask import request
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            return do_the_login()
        else:
            return show_the_login_form()

    其中导入request后,可以通过其获取当前请求的请求方式,如果携带有请求体,则还可以通过它拿到传参。

相关推荐
笃行3505 小时前
SQLServer数据迁移之后,那张报表还能不能秒出
后端
LucianaiB6 小时前
别再被 AI 骗了:我把腾讯云 4 个 Skill 做成了个「AI 打假侦探」,过程的一个小配置坑惨了我
后端
candyTong6 小时前
Claude Code 如何恢复一段会话
后端·架构·ai编程
jufeng13077 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 11 篇】
python·ai agent·mcp
En^_^Joy7 小时前
Django项目配置全攻略:settings配置文件
后端·python·django
for_ever_love__8 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
AC赳赳老秦9 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
麻雀飞吧10 小时前
零基础选量化工具,先把问题说清楚
人工智能·python
段一凡-华北理工大学10 小时前
AI推动工业智能化转型~系列文章20:工业 AI 平台架构:云-边-端协同的技术体系
人工智能·python·架构·工业平台·云-边协同