Python Bottle框架实现基础GET与POST请求教程

蓝鲸
蓝鲸
发布时间:2026-10-12| 3人浏览过
原创

本文详解如何在Python的Bottle轻量级Web框架中正确处理GET与POST请求。通过分离路由装饰器,演示如何安全获取表单参数,重点解析query对象在UTF-8中文编码下的正确处理方式,并附完整可运行的服务端代码与测试步骤。

Bottle框架处理GET与POST请求的核心流程

在搭建轻量级Web服务时,区分和处理HTTP GET与POST请求是基础环节。Bottle框架通过装饰器自动匹配请求方法,开发者只需关注路由定义与参数提取逻辑。以下将按标准操作顺序拆解完整实现步骤。

第1步:配置GET路由与表单渲染

  • 目的:拦截客户端发起的GET请求,在未提交时展示输入界面,提交后读取参数并执行校验。
  • 入口:@bottle.route('/login') 装饰器绑定URL路径。
  • 动作:判断 bottle.request.query.do_submit 字段是否传递。若为空,直接返回内嵌HTML的Form表单(属性设为 method="get");若存在,则通过 bottle.request.query 对象提取 username 与 password,调用校验函数并返回纯文本结果。
  • 重要参数:路由 /login,查询标识 do_submit,表单字段名 username / password。
  • 完成状态:在终端启动服务后,浏览器访问 http://localhost:8083/login 可见登录页,填写账号密码点击按钮后,服务端控制台打印接收值,页面反馈验证结果。
# -*- coding: utf-8 -*-
import bottle

def check_login(username, password):
    return username == 'admin' and password == '8888'

@bottle.route('/login')
def handle_get():
    # 判断是否为表单提交触发的GET请求
    if 'do_submit' in bottle.request.query:
        # 推荐使用 query 字典直接取值,Bottle底层已统一转为UTF-8字符串
        username = bottle.request.query.username.strip()
        password = bottle.request.query.password.strip()
        
        print(f'获取到参数 -> name:{username}, pwd:{password}')
        
        if check_login(username, password):
            return '

Your login information was correct.

' else: return '

Login failed.

' # 未提交时渲染表单 return '''
Username: Password:
''' bottle.run(host='localhost', port=8083)
Bottle应用本地运行界面及登录表单示例
Bottle应用启动后访问 localhost:8083/login 显示的初始登录页面

第2步:声明独立路由处理POST请求

  • 目的:针对敏感或大数据量传输场景,单独监听POST方法,避免与GET逻辑混杂导致参数污染。
  • 入口:@bottle.route('/login', method='POST') 明确指定请求方式为POST。
  • 动作:创建对应的视图函数(如 handle_post),内部通过 bottle.request.POST.get() 安全提取表单字段。验证成功后返回相同提示文本。
  • 重要参数:路由 /login,方法限定 method='POST',表单字段名需与HTML一致。
  • 完成状态:前端Form的 method 属性改为 "post" 后提交,Network面板可见请求类型为POST,后端正常接收并比对凭据。
import bottle

def check_login(username, password):
    return username == 'admin' and password == '8888'

@bottle.route('/login')
def show_form():
    # 首次访问渲染POST表单
    return '''
Username: Password:
''' @bottle.route('/login', method='POST') def handle_post(): # 直接使用 .get() 获取POST体数据,无需手动解码 username = bottle.request.POST.get('username', '').strip() password = bottle.request.POST.get('password', '').strip() if check_login(username, password): return '

Your login information was correct.

' else: return '

Login failed. Please try again.

' bottle.run(host='localhost', port=8083)

第3步:启动服务与结果验证

  • 目的:将代码部署至本地环境,验证路由分发与参数流转是否正常。
  • 入口:终端执行 python your_script.py 或直接运行脚本文件。
  • 动作:等待控制台输出 Bottle v0.12 server starting up... 及 Listening on http://localhost:8083/。随后打开浏览器访问对应IP与端口,依次执行GET与POST提交测试。
  • 重要参数:host 默认 'localhost',port 示例为 8083(可按防火墙策略修改)。
  • 完成状态:控制台持续打印 GET /login 或 POST /login 访问日志,页面稳定返回验证文本且无报错弹窗,即表示框架环境配置完毕。

编码处理与排错指南

在早期版本或特定服务器环境中,直接读取URL查询字符串可能触发 ISO-8859-1 编码转换,导致中文显示为问号或乱码。Bottle当前的 bottle.request.query 与 bottle.request.POST 对象已内置UTF-8自适应逻辑,开发者直接调用 .get() 或 .[] 即可获取纯净字符串。

若遇到以下情况,可按顺序排查:

  1. 页面提交后刷新出现重复提交警告:检查是否在POST处理后缺少重定向(建议接入Post/Redirect/Get模式)。
  2. 控制台打印参数含 %xx 符号:确认前端未使用 encodeURIComponent 额外转义,或后端补充 urllib.parse.unquote() 还原。
  3. 本地端口被占用:修改 bottle.run(port=xxxx) 切换至空闲端口。

简要总结

Bottle框架通过装饰器语法实现GET与POST的路由隔离,大幅降低了Web开发的配置成本。掌握 bottle.request.query 与 bottle.request.POST 的标准化取值方式,配合明确的 method 声明,即可快速构建安全的表单交互节点。避免混用不同版本的编码解包函数,能从根本上杜绝字符集错乱问题。

以上就是Python Bottle框架实现基础GET与POST请求的详细内容,更多关于Bottle Web开发的基础资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。