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后,可以通过其获取当前请求的请求方式,如果携带有请求体,则还可以通过它拿到传参。

相关推荐
IT_陈寒2 分钟前
React性能优化实战:我用这5个技巧将组件渲染速度提升了70%
前端·人工智能·后端
程序员三明治10 分钟前
SpringBoot YAML 配置读取机制 + 数据库自动初始化原理
数据库·spring boot·后端
Victor35619 分钟前
Redis(130)Redis的压缩列表(Ziplist)是如何实现的?
后端
q***829124 分钟前
Spring Boot 热部署
java·spring boot·后端
Victor35624 分钟前
Redis(131)Redis的整数集合(Intset)是如何实现的?
后端
yuuki2332331 小时前
【数据结构】栈
c语言·数据结构·后端
cheniie1 小时前
python xmlrpc踩坑记录
python·踩坑·xmlrpc
咖啡の猫3 小时前
搭建Python开发环境
开发语言·python
程序猿小蒜4 小时前
基于springboot的共享汽车管理系统开发与设计
java·开发语言·spring boot·后端·spring·汽车
听风吟丶5 小时前
Java 8 Stream API 高级实战:从数据处理到性能优化的深度解析
开发语言·python