在Flask开发中,页面的重定向和错误处理几乎所有的web项目都会用到,今天我们就来看看Flask中redirect和abort的用法。Flask中的重定向,作用是将用户从当前URL自动 跳转到另一个URL,当重定向触发时,服务器会返回一个HTTP状态码,告诉浏览器加载新的地址。常见的场景有表单提交完成后跳转到结果页,用户登录验证后跳转到首页;资源地址变更后自动跳转。flask.redirect(location, code=302)
常用重定向HTTP状态码基本是3位数字,服务器用它告知浏览器如何处理请求,常用定向码如下:接下来我们看看示例,我们做个简单的登录界面,输入用户名admin跳转到成功页,输入其它内容,跳回登录页项目文件夹/├── app.py # Flask 主程序└── templates/ # 模板文件夹 └── login.html # 登录页面
from flask import Flask, redirect, url_for, render_template, request# 初始化 Flask 应用app = Flask(__name__)# 首页:展示登录表单@app.route('/')def index(): return render_template("login.html")# 登录成功页@app.route('/success')def success(): return "登录成功!"# 登录处理路由@app.route("/login", methods=["POST", "GET"])def login(): # POST 请求 + 用户名为 admin → 跳转到成功页 if request.method == "POST" and request.form["username"] == "admin": return redirect(url_for("success")) # 其他情况 → 跳回登录页 return redirect(url_for('index'))if __name__ == '__main__': app.run(debug=True)
登录页面模版 templates/login.html<!DOCTYPE html><htmllang="en"><body> <!-- 表单提交到 /login 路由 --> <formmethod="POST"action="/login"> 用户名:<inputname="username"type="text"><br> <buttontype="submit">登录</button> </form></body></html>
在重定向中,我们几乎不会硬编码URL,而是用url_for()动态生成,我们根据用户名判断,跳转到管理员或者访客页面from flask import Flask, redirect, url_forapp = Flask(__name__)# 管理员页面@app.route('/admin')def hello_admin(): return '你好,管理员'# 访客页面@app.route('/guest/<guest>')def hello_guest(guest): return f'你好,{guest} 访客'# 根据用户名自动跳转@app.route('/user/<name>')def hello_user(name): if name == 'admin': # 跳转到 hello_admin 函数对应的路由 return redirect(url_for('hello_admin')) else: # 跳转到 hello_guest,并传递参数 return redirect(url_for('hello_guest', guest=name))if __name__ == '__main__': app.run(debug=True)
当访问/user/admin 跳转到/admin, 显示 【你好,管理员】,当访问/user/zhangsan 跳转到/guest/zhangsan,显示【你好,zhangsan访客】看完redirect,我们再看看abort函数,它的基本语法abort(code,message=None)例如我们要判断用户名,如果以数字开头,则直接抛出400错误:from flask import Flask, abortapp = Flask(__name__)@app.route('/<uname>')def index(uname): # 用户名首字符是数字 → 抛出 400 错误 if uname[0].isdigit(): abort(400) return '<h1>用户名格式合法</h1>'if __name__ == '__main__': app.run()
400表示非法请求,如果我们将错误码改为403,拒绝非法用户名访问:from flask import Flask, abortapp = Flask(__name__)@app.route('/<uname>')def index(uname): if uname[0].isdigit(): abort(403) return '<h1>用户名格式合法</h1>'if __name__ == '__main__': app.run()
总之,Flask重定向用redirect 配合url_for 动态生成URL,适配表单提交、登录验证登场景,错误处理用abort(),直接抛出标准HTTP错误码,快速终止非法请求。