0Pricing
Python Academy · 课时

表单与请求数据

处理用户输入

表单与请求数据 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

request 对象

Flask 会让每个视图都能访问一个全局 request 对象,其中包含所有传入数据:表单字段、查询字符串、JSON、请求头等。

from flask import Flask, request
app = Flask(__name__)
# request is available inside any view
print('request carries the incoming data')

查询字符串参数

URL 中 ? 后面的数据位于 request.args 中。使用 .get() 可以安全地读取值。

from flask import Flask, request
app = Flask(__name__)

@app.route('/search')
def search():
    term = request.args.get('q', '')
    return 'Searching for ' + term
print('/search?q=cats -> request.args')

HTML 表单

表单提交时会发送数据。method 和 action 属性决定发送方式和目标位置。

# <form method='POST' action='/login'>
#   <input name='username'>
#   <input name='password' type='password'>
#   <button>Submit</button>
# </form>
print('Form posts username and password')

读取表单数据

提交的表单字段会出现在 request.form 中。请通过输入项的 name 属性访问它们。

from flask import Flask, request
app = Flask(__name__)

@app.route('/login', methods=['POST'])
def login():
    user = request.form['username']
    return 'Welcome ' + user
print('request.form holds posted fields')

使用 get 安全访问

使用 request.form['x'] 时,如果键不存在就会引发异常。请优先使用 request.form.get('x'),它会改为返回 None。

from flask import Flask, request
app = Flask(__name__)

@app.route('/login', methods=['POST'])
def login():
    user = request.form.get('username')
    if not user:
        return 'Missing username', 400
    return 'Welcome ' + user
print('.get avoids KeyError')

在一个视图中处理 GET 和 POST

一种常见模式是:在 GET 请求中显示表单,在 POST 请求中处理数据,并将两者放在同一个视图中。

from flask import Flask, request, render_template
app = Flask(__name__)

@app.route('/contact', methods=['GET', 'POST'])
def contact():
    if request.method == 'POST':
        return 'Thanks, ' + request.form.get('name', 'friend')
    return render_template('contact.html')
print('One view, two methods')

验证输入

绝不要信任用户输入。在使用数据之前,请检查必填字段是否存在,以及字段值是否合理。

from flask import Flask, request
app = Flask(__name__)

@app.route('/age', methods=['POST'])
def age():
    raw = request.form.get('age', '')
    if not raw.isdigit():
        return 'Age must be a number', 400
    return 'Age is ' + raw
print('Validate before trusting input')

读取 JSON

API 客户端经常发送 JSON。request.get_json() 会将正文解析为 Python 字典。

from flask import Flask, request
app = Flask(__name__)

@app.route('/api', methods=['POST'])
def api():
    data = request.get_json()
    return 'Got name ' + data.get('name', '?')
print('get_json parses the JSON body')

文件上传

上传的文件位于 request.files 中。验证文件后,可以使用其 .save() 方法保存文件。

from flask import Flask, request
app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload():
    f = request.files.get('photo')
    if f:
        return 'Received ' + f.filename
    return 'No file', 400
print('request.files holds uploads')

POST 后重定向

处理表单后,请将用户重定向,以避免用户刷新页面时重复提交。请使用 redirect(url_for(...))。

from flask import Flask, redirect, url_for
app = Flask(__name__)

@app.route('/done')
def done():
    return 'All done'

@app.route('/save', methods=['POST'])
def save():
    return redirect(url_for('done'))
print('Post/Redirect/Get pattern')

闪现消息

flash() 会存储一条重定向后显示的一次性消息,非常适合显示“保存成功”等确认信息。

from flask import Flask, flash, redirect, url_for
app = Flask(__name__)
app.secret_key = 'change-me'

@app.route('/save', methods=['POST'])
def save():
    flash('Saved successfully')
    return redirect(url_for('save'))
print('flash shows a one-time message')

快速检查

测试您处理表单的知识。

回顾

您学会了在 Flask 中处理用户输入。

  • 使用 request.args 处理查询字符串,使用 request.form 处理表单字段
  • 使用 request.get_json() 处理 JSON 正文,使用 request.files 处理上传文件
  • 始终验证输入,并使用 .get() 进行安全访问
  • 使用提交/重定向/获取模式和 flash() 改善用户体验

常见问题解答

「表单与请求数据」课时是免费的吗?

是的 — 「表单与请求数据」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「表单与请求数据」这节课中我会学到什么?

处理用户输入 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「表单与请求数据」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 路由与视图
  2. 使用 Jinja2 创建模板
  3. 表单与请求数据
  4. 构建 REST 端点
← 返回 Python Academy