ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. Flask 基本结构
  • 2. 路由和视图函数
    • 动态路由
  • 3. 请求和响应
    • 处理请求数据
    • 返回响应
    • 基本用法
  • 4. 模板渲染
  • 5. 静态文件
  • 6. 错误处理
  • 7. 重定向和会话
  • 8. REST API 开发

Flask 是一个轻量级的 Python Web 框架,它简单易用但功能强大,非常适合快速开发小型到中型的 Web 应用程序。以下是 Flask 的核心概念和用法讲解:

1. Flask 基本结构 #

# 导入Flask框架
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
# 判断是否直接运行此文件
if __name__ == '__main__':
    # 启动Flask开发服务器
    app.run()

2. 路由和视图函数 #

Flask 使用 `@app.route()` 装饰器来定义路由:

# 导入Flask框架
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
+# 定义根路由,当用户访问网站首页时调用此函数
+@app.route('/')
+# 定义首页视图函数
+def index():
+    # 返回首页内容
+    return '首页'
+
+# 定义关于页面路由,当用户访问 /about 路径时调用此函数
+@app.route('/about')
+# 定义关于页面视图函数
+def about():
+    # 返回关于页面的内容
+    return '关于我们'
# 判断是否直接运行此文件
if __name__ == '__main__':
    # 启动Flask开发服务器
    app.run()

动态路由 #

# 导入Flask框架
from flask import Flask
# 创建Flask应用实例
app = Flask(__name__)
+# 定义用户资料页面路由,使用动态参数username
+@app.route('/user/<username>')
+# 定义显示用户资料的视图函数,接收username参数
+def show_user_profile(username):
+    # 返回包含用户名的页面内容
+    return f'用户: {username}'
+# 定义文章页面路由,使用动态参数post_id,指定为整数类型
+@app.route('/post/<int:post_id>')
+# 定义显示文章的视图函数,接收post_id参数
+def show_post(post_id):
+    # 返回包含文章ID的页面内容
+    return f'文章 ID: {post_id}'
# 判断是否直接运行此文件
if __name__ == '__main__':
    # 启动Flask开发服务器
    app.run()

3. 请求和响应 #

处理请求数据 #

# 导入Flask框架和request模块,用于处理HTTP请求
from flask import Flask, request

# 创建Flask应用实例,__name__表示当前模块名
app = Flask(__name__)

# 定义登录页面路由,支持GET和POST两种HTTP请求方法
@app.route('/login', methods=['GET', 'POST'])
# 定义登录视图函数,处理用户登录逻辑
def login():
    # 判断请求方法是否为POST(表单提交)
    if request.method == 'POST':
        # 从POST请求的表单数据中获取用户名
        username = request.form['username']
        # 从POST请求的表单数据中获取密码
        password = request.form['password']
        # 在控制台打印用户名和密码信息(用于调试)
        print(f'用户名: {username}, 密码: {password}')
        # 返回登录成功的消息给用户
        return '登录成功'
    else:
        # 如果是GET请求,调用函数显示登录表单页面
        return show_login_form()

# 定义显示登录表单的函数,返回HTML格式的登录页面
def show_login_form():
    # 返回包含登录表单的完整HTML页面
    return '''
    <!doctype html>
    <html>
    <head><title>登录</title></head>
    <body>
        <h1>用户登录</h1>
        <form method="POST">
            <p>用户名: <input type="text" name="username" required></p>
            <p>密码: <input type="password" name="password" required></p>
            <p><input type="submit" value="登录"></p>
        </form>
    </body>
    </html>
    '''

# 判断当前脚本是否作为主程序直接运行(而不是被导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求
    app.run()

返回响应 #

make_response 是 Flask 中用于创建自定义 HTTP 响应的函数,它提供了比直接返回字符串更灵活的响应控制。

基本用法 #

# 导入Flask框架和make_response模块,用于创建自定义HTTP响应
from flask import Flask, make_response

# 创建Flask应用实例,__name__表示当前模块名
app = Flask(__name__)
# 定义自定义响应页面路由,当用户访问 /custom-response 路径时调用此函数
@app.route('/custom-response')
# 定义自定义响应视图函数,创建带有自定义头部的HTTP响应
def custom_response():
    # 使用make_response创建自定义响应对象,内容为'自定义响应'
    response = make_response('自定义响应')
    # 为响应添加自定义头部字段,设置X-Custom-Header的值为'Value'
    response.headers['X-Custom-Header'] = 'Value'
    # 返回自定义响应对象给客户端
    return response        
# 判断当前脚本是否作为主程序直接运行(而不是被导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求
    app.run()

4. 模板渲染 #

Flask 使用 Jinja2 模板引擎:

# 导入Flask框架和render_template模块,用于创建Web应用和渲染HTML模板
from flask import Flask, render_template

# 创建Flask应用实例,__name__表示当前模块名
app = Flask(__name__)

# 定义动态路由,当用户访问 /hello/<name> 路径时调用此函数,其中<name>是动态参数
@app.route('/hello/<name>')

# 定义hello视图函数,接收name参数并渲染模板
def hello(name):
    # 使用render_template渲染hello.html模板,并将name变量传递给模板
    return render_template('hello.html', name=name)      

# 判断当前脚本是否作为主程序直接运行(而不是被导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求
    app.run()

对应的模板文件 templates\hello.html:

<!doctype html>
<html>
<head>
  <title>Hello</title>
</head>
<body>
  <h1>Hello, {{ name }}!</h1>
</body>
</html>

5. 静态文件 #

静态文件(CSS, JS, 图片)放在 static 目录下:

url_for() 是 Flask 框架中一个非常有用的函数,用于动态生成 URL。它可以帮助你避免在代码中硬编码 URL,使应用更易于维护和扩展。

url_for('static', filename='style.css')  # 生成 /static/style.css

templates\hello.html

<!doctype html>
<html>
<head>
  <title>Hello</title>
+  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
  <h1>Hello, {{ name }}!</h1>
</body>
</html>

static\style.css

body{
  color:red;
}

6. 错误处理 #

# 导入Flask框架和render_template模块,用于创建Web应用和渲染HTML模板
from flask import Flask, render_template

# 创建Flask应用实例,__name__表示当前模块名
app = Flask(__name__)
# 定义动态路由,当用户访问 /hello/<name> 路径时调用此函数,其中<name>是动态参数
@app.route('/hello/<name>')
# 定义hello视图函数,接收name参数并渲染模板
def hello(name):
    # 使用render_template渲染hello.html模板,并将name变量传递给模板
    return render_template('hello.html', name=name)      
@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html', error=error), 404
# 判断当前脚本是否作为主程序直接运行(而不是被导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求
    app.run()

templates\404.html

<!doctype html>
<html>
<head>
  <title>Hello</title>
  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
  <h1>{{ error }}</h1>
</body>
</html>

7. 重定向和会话 #

# 导入Flask框架和相关模块,包括重定向、URL生成、会话管理和请求处理功能
from flask import Flask, redirect, url_for, session, request

# 创建Flask应用实例,__name__参数表示当前模块的名称
app = Flask(__name__)
# 设置应用密钥,用于加密会话数据,确保会话安全
app.secret_key = 'your-secret-key'

# 定义管理员检查函数,通过会话中的用户名判断是否为管理员
def is_admin():
    # 从会话中获取用户名,如果等于'admin'则返回True,否则返回False
    return session.get('username') == 'admin'

# 定义管理员页面路由,当用户访问/admin路径时调用此函数
@app.route('/admin')
def admin():
    # 检查用户是否为管理员,如果不是则重定向到登录页面
    if not is_admin():
        return redirect(url_for('login'))
    # 如果是管理员,返回管理员页面内容
    return '管理员页面'

# 定义登录页面路由,支持GET和POST两种请求方法
@app.route('/login', methods=['GET', 'POST'])
def login():
    # 如果是POST请求,处理登录表单提交
    if request.method == 'POST':
        # 从表单中获取用户输入的用户名和密码
        username = request.form['username']
        password = request.form['password']
        # 验证用户名和密码是否正确(这里使用硬编码的admin/admin123)
        if username == 'admin' and password == 'admin123':
            # 登录成功,将用户名存储到会话中
            session['username'] = username
            # 重定向到管理员页面
            return redirect(url_for('admin'))
        # 登录失败,返回错误信息
        return '登录失败,请重试'
    # 如果是GET请求,返回登录表单HTML
    return '''
        <form method="post">
            <p>用户名: <input type="text" name="username"></p>
            <p>密码: <input type="password" name="password"></p>
            <p><input type="submit" value="登录"></p>
        </form>
    '''

# 定义登出路由,当用户访问/logout路径时调用此函数
@app.route('/logout')
def logout():
    # 从会话中删除用户名,清除用户登录状态
    session.pop('username', None)
    # 重定向到登录页面
    return redirect(url_for('login'))

# 判断当前脚本是否作为主程序直接运行(而不是被其他模块导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求,默认端口为5000
    app.run()

8. REST API 开发 #

使用 Flask 构建 REST API:

# 导入Flask框架和jsonify模块,用于创建Web应用和返回JSON格式数据
from flask import Flask, jsonify
# 创建Flask应用实例,__name__参数表示当前模块的名称
app = Flask(__name__)
# 定义API路由,当用户访问/api/users路径时调用此函数,仅支持GET请求方法
@app.route('/api/users', methods=['GET'])
# 定义get_users视图函数,用于获取用户列表数据
def get_users():
    # 创建用户数据列表,包含两个用户的ID和姓名信息
    users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
    # 将用户数据转换为JSON格式并返回,同时设置HTTP状态码为200(成功)
    return jsonify(users), 200
# 判断当前脚本是否作为主程序直接运行(而不是被其他模块导入)
if __name__ == '__main__':
    # 启动Flask开发服务器,开始监听HTTP请求,默认端口为5000
    app.run()

访问验证

请输入访问令牌

Token不正确,请重新输入