【PythonWeb开发】Flask请求中传递参数到视图函数的方法总结。

在Flask中,传入参数主要有两种常见的方式,即通过GET请求和POST请求。

一、GET请求传递参数

(1)URL路径中获取

这种类型的参数通常称为路径参数或路由参数,它们是URL路径的一部分,通过尖括号**<parameter_name>**定义在路由规则中。

python 复制代码
@app.route('/user/<username>/post/<int:post_id>')
def show_post(username, post_id):
    # 这里可以直接通过函数参数获取路径中的变量
    return f"Username: {username}, Post ID: {post_id}"

如果你需要更复杂的路径参数处理,或者在处理请求之后动态获取路径参数,可以使用**request.view_args**,它是一个字典,包含了所有通过URL路径传递的参数。

python 复制代码
@app.route('/some/route/<path:custom_path>')
def handle_custom_path(custom_path):
    # 除了直接作为参数,你也可以通过view_args获取
    print(request.view_args)  # 输出: {'custom_path': 'the/path/from/url'}
    return f"The custom path is: {custom_path}"

(2)请求参数中获取

GET请求通常将参数附加在URL后面,通过问号**?** 分隔URL和参数,多个参数之间使用**&**连接。这种方式适用于请求不会改变服务器上的资源,且参数长度有限制(因为参数直接出现在URL中)。

复制代码
http://example.com/api/data?key1=value1&key2=value2

使用**request.args**字典对象来获取GET参数。有三种使用方法:

  • get方法,如果该参数不存在,则可以提供一个默认值,避免抛出异常。
  • get_list方法,当一个参数可能在同一请求中有多个值时,返回一个包含所有值的列表。
  • 中括号,这种方式与普通字典访问类似,取不到会抛出异常。
python 复制代码
from flask import request

@app.route('/api/data')
def get_data():
    key1 = request.args.get('key1')  # 获取key1的值,如果不存在则返回None
    key2 = request.args['key2']      # 直接通过键访问,如果不存在会抛出KeyError
    key3 = request.args.get_list('key3')  # 取出存在同名key的所有值
    return f"Key1: {key1}, Key2: {key2}, Key3: {key3}"

二、POST请求传递参数

POST请求通常用于提交表单或发送可能改变服务器状态的数据。参数不在URL中显示,而是放在请求体中。POST请求可以承载更大的数据量,且对数据类型的支持更灵活。

POST请求有两种常见的编码格式:

  • application/x-www-form-urlencoded:表单数据,类似于GET请求的查询字符串格式。
  • multipart/form-data:用于文件上传,也可以包含普通字段。

(1)上传表单数据

对于表单使用**request.form**

  • 中括号方式
  • get方法

(2)上传JSON数据

对于JSON格式的数据(当Content-Type为**application/json** 时),使用**request.get_json()**

python 复制代码
from flask import request, jsonify

@app.route('/api/data', methods=['POST'])
def post_data():
    if request.is_json:  # is_json属性可以判断返回的是否是json数据
        data = request.get_json()          # 获取JSON格式的POST数据
        key1 = data.get('key1')           # 如果数据是JSON对象,则这样获取
    else:
        key1 = request.form.get('key1')    # 获取表单形式的POST数据
    return jsonify({"received_key1": key1})

(3)上传视频数据

使用**request.files**来取出上传的文件。

python 复制代码
@app.route('/upload_video', methods=['POST'])
def upload_video():
    video_file = request.files['video']  # 假设表单中文件字段名为'video'
    
    if video_file.filename == '':
        return "No video selected", 400
    
    # 可以在这里添加额外的验证,比如检查文件大小、视频格式等
    if video_file and allowed_file(video_file.filename, video_extensions):  # 假设allowed_file检查文件类型和大小
        filename = secure_filename(video_file.filename)
        video_file.save(os.path.join(app.config['VIDEO_UPLOAD_FOLDER'], filename))
        return "Video uploaded successfully"
    else:
        return "Invalid video file or other error", 400

(4)上传图片数据

使用**request.files**来取出上传的文件。上传图片数据的过程与上述视频上传相似,只是可能在验证阶段会特别检查图片的格式。

python 复制代码
def allowed_file(filename):
    """检查文件扩展名是否允许上传"""
    ALLOWED_EXTENSIONS = { 'jpg', 'jpeg', 'png', 'gif'}
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
python 复制代码
@app.route('/upload_image', methods=['POST'])
def upload_image():
    image_file = request.files['image']  # 假设表单中文件字段名为'image'
    
    if image_file.filename == '':
        return "No image selected", 400
    
    # 验证图片格式等
    if image_file and allowed_file(image_file.filename, image_extensions):  # 使用适合的图片扩展名集合
        filename = secure_filename(image_file.filename)
        image_file.save(os.path.join(app.config['IMAGE_UPLOAD_FOLDER'], filename))
        return "Image uploaded successfully"
    else:
        return "Invalid image file or other error", 400
相关推荐
麦麦大数据3 小时前
F054-基于Vue+Flask+Neo4j构建的移民知识图谱可视化分析系统
vue.js·flask·知识图谱·neo4j·移民分析
麦麦大数据4 小时前
F055 vue+neo4j船舶知识问答系统|知识图谱|问答系统
vue.js·flask·问答系统·知识图谱·neo4j·可视化
yy我不解释4 小时前
关于comfyui的token顺序打乱(三)
python·ai作画·flask·状态模式·comfyui
Psycho_MrZhang1 天前
Flask 设计思想总结
后端·python·flask
工业互联网专业1 天前
基于python的旅游景点推荐系统_flask+spider
python·flask·毕业设计·源码·课程设计·spider·旅游景点推荐系统
achi0101 天前
从 0 到 1 掌握 Gunicorn:让 Python Web 应用飞起来的 WSGI 服务器
python·flask·性能调优·容器化·gunicorn·wsgi·并发模型
曲幽1 天前
FastAPI入门:从简介到实战,对比Flask帮你选对框架
python·flask·fastapi·web·route·uv·uvicorn·docs
麦麦大数据2 天前
F053 投标推荐可视化系统+推荐算法vue+flask+爬虫
vue.js·爬虫·flask·可视化·推荐算法·招投标
许泽宇的技术分享2 天前
AgentFramework: 安全最佳实践
python·安全·flask
席万里3 天前
基于Flask框架实现的一个在线考试系统
后端·python·flask