快速解决
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. 云服务器部署方案
使用 gunicorn 和 nginx 部署到 Ubuntu 服务器:
- 安装 gunicorn:
pip install gunicorn - 启动服务:
gunicorn -w 4 -b 0.0.0.0:8000 app:app - 配置 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 应用实例名称。
如何防止代码注入攻击?
- 使用沙箱执行环境(如 Docker 容器)
- 限制代码执行时间(
timeout参数) - 移除危险模块(如
os.system调用)
为什么数据库无法写入?
检查 SQLite 文件权限是否设置为 chmod 666 practice.db,或改用内存数据库测试:
sqlite3.connect(':memory:')
总结
通过 Flask 构建在线练习系统,只需基础路由、数据库连接和表单处理即可实现核心功能。