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


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

    这篇博客是我刚接触 flask,研究文档时的一些记录与体会,希望对各位刚接触 flask 的朋友有所帮助。
    且在此篇后,我还会另写一篇关于纯后端的 flask 教程,介绍一下如何使用 flask 创建一个较为完善的纯后端的服务。

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

    安装 flask:

    pip install flask
    
    • 1

    一、最小应用

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

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello_world():
        return "

    Hello, World!

    "
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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
    
    • 1
    • 2
    • 3

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

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

    二、路由及HTTP方法

    1、路由

    1. 基础使用
      flask 中使用@app.route()来配置路由,从上面的例子应该看出,当我们访问对应路由的时候,该配置能将请求交由对应函数进行处理,函数的返回值即为请求的响应值:
      @app.route('/')
      def index():
          return 'Index Page'
      
      @app.route('/hello')
      def hello():
          return 'Hello, World'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    2. 路由传参
      有时候参数需要通过路由传递,以CSDN的个人主页为例,不同用户的个人主页的URL不同之处在于路由中最后部分,为了能配置并接收参数,可以在配置路由的时候使用<>表示动态路由参数,并使用函数形参接收:
      from markupsafe import escape
      
      @app.route('/user/')
      def show_user_profile(username):
          # show the user profile for that user
          return f'User {escape(username)}'
      
      @app.route('/post/')
      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/')
      def show_subpath(subpath):
          # show the subpath after /path/
          return f'Subpath {escape(subpath)}'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      并且,通过使用 converter:variable_name ,可以选择性的加上一个转换器,为变量指定规则:
      在这里插入图片描述
    3. URL 构建
      url_for() 函数用于构建指定函数的 URL。它把函数名称作为第 一个参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。 未知变量将添加到 URL 中作为查询参数:
      from flask import url_for
      
      app = Flask(__name__)
      
      @app.route('/')
      def index():
          return 'index'
      
      @app.route('/login')
      def login():
          return 'login'
      
      @app.route('/user/')
      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'))
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      输出:
      /
      /login
      /login?next=/
      /user/John%20Doe
      
      • 1
      • 2
      • 3
      • 4
      多用于使用静态资源文件等。
    4. HTTP方法
      @app.route默认只匹配 GET 请求,而如果想要能够匹配别的HTTP方法,或者多种HTTP方法,则可这么做:
      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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      其中导入request后,可以通过其获取当前请求的请求方式,如果携带有请求体,则还可以通过它拿到传参。
  • 相关阅读:
    springboot实现(select && insert)
    进程的状态
    【vector题解】杨辉三角 | 删除有序数组中的重复项 | 只出现一次的数字Ⅱ
    【Python】第十课 魔法方法
    Linux操作系统——校招高频考点汇总
    华为电脑重装系统如何操作?电脑Win11系统重装注意什么?图文详细解答
    mac jdk,git,idea安装
    制药企业固体制剂设备管理及维护要点
    [鹏程杯2023]复现
    投你500万,你想做什么?头脑风暴一下 无限想像 有想法的人都能投 数学
  • 原文地址:https://blog.csdn.net/qq_51574759/article/details/132791540