MST

星途 面试题库

面试题:Python Flask中如何处理带参数的路由并进行请求处理?

在Python Flask框架里,描述一下定义带参数路由的语法,以及如何在视图函数中获取并处理这些参数,同时说明GET和POST请求下处理参数方式的异同。
44.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

定义带参数路由的语法

在Flask中,定义带参数路由使用尖括号 <> 来捕获参数。例如:

from flask import Flask

app = Flask(__name__)

@app.route('/user/<username>')
def show_user_profile(username):
    return f'User {username}'

@app.route('/post/<int:post_id>')
def show_post(post_id):
    return f'Post {post_id}'

这里,/<username>/<int:post_id> 分别定义了捕获字符串类型的 username 参数和整数类型的 post_id 参数的路由。类型限定词(如 int)是可选的,如果不指定,参数默认是字符串类型。

在视图函数中获取并处理参数

  1. 对于上述路由定义的参数: 在视图函数的参数列表中直接声明与路由中捕获参数同名的参数,即可获取该参数值。如上面例子中,show_user_profile 函数的 username 参数和 show_post 函数的 post_id 参数。然后可以根据业务需求进行处理,如查询数据库、返回特定响应等。
  2. 对于查询字符串参数(常见于GET请求): 在视图函数中可以通过 request.args 获取,request 是Flask提供的请求上下文对象。例如:
from flask import Flask, request

app = Flask(__name__)

@app.route('/search')
def search():
    keyword = request.args.get('keyword', '')
    return f'Searching for {keyword}'

这里使用 request.args.get 方法获取名为 keyword 的查询字符串参数,如果参数不存在则返回空字符串。 3. 对于表单数据参数(常见于POST请求): 在视图函数中可以通过 request.form 获取。例如:

from flask import Flask, request

app = Flask(__name__)

@app.route('/submit', methods=['POST'])
def submit():
    username = request.form.get('username')
    password = request.form.get('password')
    return f'Username: {username}, Password: {password}'

这里使用 request.form.get 方法获取表单中名为 usernamepassword 的参数值。

GET和POST请求下处理参数方式的异同

  • 相同点
    • 都可以通过 request 对象来获取参数。无论是GET还是POST请求,Flask都使用相同的 request 上下文对象来处理请求相关信息。
    • 对于在路由中定义的参数(如 /user/<username> 中的 username),获取和处理方式不受请求方法影响,都是在视图函数参数列表中声明同名参数来获取。
  • 不同点
    • 参数位置
      • GET请求:参数通常以查询字符串的形式附加在URL后面,例如 http://example.com/search?keyword=python。通过 request.args 获取。
      • POST请求:参数通常放在请求体中,例如在HTML表单提交时,数据会以表单格式放在请求体。通过 request.form 获取。
    • 安全性
      • GET请求:参数暴露在URL中,不太适合传递敏感信息,如密码等。因为URL可能会被记录在日志、浏览器历史等地方。
      • POST请求:参数在请求体中,相对更安全,适合传递敏感数据。
    • 数据长度限制
      • GET请求:由于URL长度限制(不同浏览器和服务器有不同限制,一般较短),所以能传递的数据量有限。
      • POST请求:理论上对请求体大小没有限制(实际受服务器配置限制),可以传递大量数据。