Flask 在线练习(深入浅出)

快速解决

flask run 命令能快速启动本地开发服务器,用于 Flask 在线练习环境调试。

常用方法

命令/方法 频率 描述
flask run ★★★★★ 启动本地开发服务器
request.form ★★★★☆ 处理表单提交数据
app.route() ★★★★★ 定义 URL 路由规则
render_template() ★★★★☆ 渲染 HTML 模板
sqlite3.connect() ★★★☆☆ 连接轻量级数据库
gunicorn ★★★★☆ 部署生产环境服务器
Flask-Session ★★★☆☆ 实现跨请求的会话管理

详细说明

1. 处理表单提交数据

from flask import request
@app.route('/submit', methods=['POST'])
def submit():
    # 获取用户通过 POST 方法提交的 'username' 字段
    username = request.form.get('username')  
    # 获取 'password' 字段
    password = request.form.get('password')  
    # 返回 JSON 格式响应(适用于 API 接口测试)
    return {'status': 'success', 'data': {'username': username}}  

2. 数据库存储练习记录

import sqlite3
def init_db():
    # 连接到 SQLite 数据库(文件路径为 'practice.db')
    conn = sqlite3.connect('practice.db')  
    # 创建游标对象
    c = conn.cursor()  
    # 创建用户表(如果不存在)
    c.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)')  
    # 提交事务
    conn.commit()  
    # 关闭连接
    conn.close()  

3. 模板渲染与用户界面

from flask import render_template
@app.route('/practice')
def practice():
    # 传递题目参数到 HTML 模板
    return render_template('practice.html', question='请实现一个登录接口')  

高级技巧

1. 云服务器部署方案

使用 gunicornnginx 部署到 Ubuntu 服务器:

  1. 安装 gunicorn:pip install gunicorn
  2. 启动服务:gunicorn -w 4 -b 0.0.0.0:8000 app:app
  3. 配置 nginx 反向代理,将 80 端口请求转发到 8000 端口

2. 多模块练习系统设计

from flask import Flask
app = Flask(__name__)  
from auth import auth_bp
app.register_blueprint(auth_bp, url_prefix='/auth')  

3. 练习结果即时验证

import subprocess
def run_code(code):
    # 执行用户提交的代码(需严格限制执行权限)
    result = subprocess.run(['python', '-c', code], capture_output=True, text=True)  
    # 返回执行结果和错误信息
    return result.stdout, result.stderr  

常见问题

为什么本地启动正常,部署后出现 500 错误?

检查 gunicorn 启动参数是否指定正确模块对象,如 app:app 中的第二个 app 是 Flask 应用实例名称。

如何防止代码注入攻击?

  1. 使用沙箱执行环境(如 Docker 容器)
  2. 限制代码执行时间(timeout 参数)
  3. 移除危险模块(如 os.system 调用)

为什么数据库无法写入?

检查 SQLite 文件权限是否设置为 chmod 666 practice.db,或改用内存数据库测试:

sqlite3.connect(':memory:')

总结

通过 Flask 构建在线练习系统,只需基础路由、数据库连接和表单处理即可实现核心功能。