DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • Django

  • 第一次学drf

  • 第二次学drf

  • 温故知新

  • flask

    • flask使用

    • flask源码

      • 面试题
      • 快速使用
      • 数据库链接池
      • flask的使用
      • flask上下文管理
      • 使用简记
    • 后端
    • flask
    • flask源码
    DC
    2024-09-24
    目录

    使用简记

    最简单的Flask程序

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/index')
    def index():
        return "hello world"
    
    
    if __name__ == '__main__':
        app.run()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 配置文件
    主流的就两种
    - 一种基于全局变量  > settings.py  localsettings.py
    - 一种基于类的方式  > settings.py里面写三个类 BaseSettings、DevSettings、ProdSettings
    
    1
    2
    3
    # 模版和静态文件
    app = Flask(__name__,template_folder='templates',static_folder='static')
    
    <img src="{{ url_for('static',filename='keep1.png')}}" alt="">  # xx/xx/keep1.png
    
    1
    2
    3
    # 路由
    @app.route('/login', methods=['GET', 'POST'], endpoint='login')
    def login():pass
    
    - ★ flask的路由是装饰器
    - 三个参数 url methods endpoint
      注意,若不写methods参数,默认仅支持GET请求
      注意,endpoint用于反向生成路由 若不写,其默认值就是视图函数名; ★ endpoint的值不要重名,否则会报错!!
      
      
    基于Flask路由的本质,路由还有种写法!!
    def index():
        return render_template('index.html')
    app.add_url_rule('/index', 'index', index)  # 路由、name、视图函数
    
    
    Flask还有CBV的写法,有一点很好玩,它可以设定装饰器!!
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 视图函数返回值
    from flask import Flask, render_template, jsonify, redirect, url_for
    
    @app.route('/login')
    def login():
        return "hello world"
      
      	# def render_template(template_name_or_list, **context) >> 向模版传递数据 **dic 或者 data=xx
        return render_template('login.html')  
      
        return redirect('/index')  #  return redirect(url_for('index')) -- url_for搭配endpoint > 反向生成路由
      
        return jsonify({'code': 200, 'data': [1, 2, 3]})
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 路由参数的传递和接收
    @app.route('/delete/<nid>')      # nid值的类型是str  <a href="/delete/{{ k }}">删除</a>
    def delete(nid):pass
    
    @app.route('/delete/<int:nid>')  # nid值的类型是int  <a href="/delete/{{ k }}">删除</a>
    def delete(nid):pass
    
    
    @app.route('/login')
    def login():
        request.args  # GET形式传递的数据 - ?params  -- <a href="/delete?nid={{ k }}">删除</a>
        request.form  # POST形式传递的数据 - 请求体数据
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 模版使用
    {{ x }}
    
    {% for item in data_list %}
        {{ item }}
    {% endfor %}
    
    flask的模版中的注释
    <!-- <td>{{  key  }}</td> --> 不生效!!
    {# <td>{{  key  }}</td> #} 生效!!
      
    
    字典取键值对, Django的模版 data_dict.items 不加括号; flask模版中 data_dict.items() 需要加括号
    字典取值, Django的模版 v.name ; flask模版中 v.name、v["name"]、v.get('name',"未知") 皆可
    在flask模版中列表直接通过下标取值!
      
      
    {% extends 'layout.html' %}
    {% block content %} {% endblock %}
    
    
    def f(name, age):  # return render_template('index.html',f=f)   {{f("dc",18)}}
        return f"Hello {name}-{age}!"
    
    
    # !! 若使用了蓝图, 那么 定义全局模板方法 的应用范围只有本蓝图!!
    @app.template_global()  # {{f1('2','3')}} - 若想为所有模版提供一些公用的方法,就使用它!!就没必要每个模版都传这个方法了.
    def f1(a, b):
        return 'f1' + a + b
    
    @app.template_filter()  # {{ "4"|f2("5","6") }}
    def f2(a, b, c):
        return 'f2' + a + b + c
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    # Session的使用
    app.secret_key = "abcdefghijklmnop"  # ★ flask使用session,必须设置secret_key这个盐
    
    from flask import Flask, session
    session['username'] = 'dc'  # 设置session
    username = session.get("username")  # 读取session
    
    flask的session认证/会话信息保持
    注-@auth需写在@app.route('/index')下方且@auth需要@functools.wraps(func) 不然用于反向生成路由的endpoint会重名,报错!!
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 特殊的装饰器 - 中间件
    @app.before_request
    def f2():
        print('f2')
        
    @app.after_request
    def f20(response):
        print('f20')
        return response
    
    1
    2
    3
    4
    5
    6
    7
    8
    # 蓝图
    小蓝图、大蓝图
    
    1
    flask上下文管理

    ← flask上下文管理

    最近更新
    01
    deepseek本地部署+知识库
    02-17
    02
    实操-微信小程序
    02-14
    03
    教学-cursor深度探讨
    02-13
    更多文章>
    Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式