Flask 视图(从路由底层到蓝图模块化)本文讲解 Flask 中视图的底层原理、类视图、装饰器应用以及蓝图模块化架构。作为从 Web 前端转 Python 后端的开发者,你需要理解 Flask 如何将 URL 映射到处理函数,以及如何用蓝图组织大型项目。所有代码均基于 Flask 2.x,可直接运行。一、路由底层原理:add_url_rule与app.route业务场景:理解 Flask 路由的底层机制,灵活注册视图函数。Web后端重要性:⭐⭐⭐⭐(理解原理有助于排查路由问题)面试标注:★★★(常问app.route底层实现)1.1 【What】是什么在 Flask 中,URL 与视图函数的映射有两种方式:装饰器:@app.route('/path')方法调用:app.add_url_rule('/path', view_func=func)fromflaskimportFlask app=Flask(__name__)# 方式1:装饰器(最常用)@app.route('/')defindex():return'首页'# 方式2:add_url_ruledefmy_list():return'列表页'app.add_url_rule('/list/',view_func=my_list)1.2 【Why】为什么需要知道底层@app.route本质上就是一个包装了add_url_rule的装饰器,理解这一点能帮你掌握 Flask 路由的运作方式。当动态注册路由(如插件系统)时,add_url_rule比装饰器更灵活。1.3 【How】endpoint 参数详解endpoint用于反向解析 URL(url_for)。如果不指定,默认使用函数名。# 不指定 endpoint,url_for 使用函数名 'index'@app.route('/')defindex():return'首页'# 指定 endpoint,url_for 必须使用 'my_home'@app.route('/home/',endpoint='my_home')defhome():return'家'# add_url_rule 同理defshow():return'展示'app.add_url_rule('/show/',view_func=show,endpoint='show_page')关键规则:指定了endpoint→url_for('endpoint名称')未指定endpoint→url_for('函数名')面试题:@app.route和add_url_rule有什么关系?答:@app.route装饰器内部调用add_url_rule完成路由注册,前者是后者的语法糖。二、标准类视图(Class-Based View)业务场景:多个视图有共同逻辑(如统一返回 JSON、统一鉴权),通过类继承复用代码。Web后端重要性:⭐⭐⭐(可选,但能提升代码组织能力)面试标注:★★★(常问类视图与函数视图的区别)2.1 【What】是什么类视图是以类的方式定义视图,继承自flask.views.View,必须实现dispatch_request方法。fromflaskimportFlaskfromflask.viewsimportView app=Flask(__name__)classMyView(View):defdispatch_request(self):return'这是类视图返回的内容'# 注册:as_view('名称') 将类转换为视图函数app.add_url_rule('/myview/',view_func=MyView.as_view('myview'))2.2 【Why】为什么需要类视图代码复用:通过继承抽取公共逻辑(如统一 JSON 序列化、统一鉴权)。结构清晰:将相关逻辑封装在类中,比函数视图更有组织性。但并非所有场景都需要:简单视图用函数更直接。2.3 【How】继承示例:统一返回 JSONfromflaskimportFlask,jsonifyfromflask.viewsimportView app=Flask(__name__)classBaseJSONView(View):"""父类:统一返回 JSON 格式"""defget_data(self):raiseNotImplementedError('子类必须实现 get_data()')defdispatch_request(self):returnjsonify(self.get_data())classUserView(BaseJSONView):defget_data
3.Flask 视图
发布时间:2026/7/7 1:49:54
Flask 视图(从路由底层到蓝图模块化)本文讲解 Flask 中视图的底层原理、类视图、装饰器应用以及蓝图模块化架构。作为从 Web 前端转 Python 后端的开发者,你需要理解 Flask 如何将 URL 映射到处理函数,以及如何用蓝图组织大型项目。所有代码均基于 Flask 2.x,可直接运行。一、路由底层原理:add_url_rule与app.route业务场景:理解 Flask 路由的底层机制,灵活注册视图函数。Web后端重要性:⭐⭐⭐⭐(理解原理有助于排查路由问题)面试标注:★★★(常问app.route底层实现)1.1 【What】是什么在 Flask 中,URL 与视图函数的映射有两种方式:装饰器:@app.route('/path')方法调用:app.add_url_rule('/path', view_func=func)fromflaskimportFlask app=Flask(__name__)# 方式1:装饰器(最常用)@app.route('/')defindex():return'首页'# 方式2:add_url_ruledefmy_list():return'列表页'app.add_url_rule('/list/',view_func=my_list)1.2 【Why】为什么需要知道底层@app.route本质上就是一个包装了add_url_rule的装饰器,理解这一点能帮你掌握 Flask 路由的运作方式。当动态注册路由(如插件系统)时,add_url_rule比装饰器更灵活。1.3 【How】endpoint 参数详解endpoint用于反向解析 URL(url_for)。如果不指定,默认使用函数名。# 不指定 endpoint,url_for 使用函数名 'index'@app.route('/')defindex():return'首页'# 指定 endpoint,url_for 必须使用 'my_home'@app.route('/home/',endpoint='my_home')defhome():return'家'# add_url_rule 同理defshow():return'展示'app.add_url_rule('/show/',view_func=show,endpoint='show_page')关键规则:指定了endpoint→url_for('endpoint名称')未指定endpoint→url_for('函数名')面试题:@app.route和add_url_rule有什么关系?答:@app.route装饰器内部调用add_url_rule完成路由注册,前者是后者的语法糖。二、标准类视图(Class-Based View)业务场景:多个视图有共同逻辑(如统一返回 JSON、统一鉴权),通过类继承复用代码。Web后端重要性:⭐⭐⭐(可选,但能提升代码组织能力)面试标注:★★★(常问类视图与函数视图的区别)2.1 【What】是什么类视图是以类的方式定义视图,继承自flask.views.View,必须实现dispatch_request方法。fromflaskimportFlaskfromflask.viewsimportView app=Flask(__name__)classMyView(View):defdispatch_request(self):return'这是类视图返回的内容'# 注册:as_view('名称') 将类转换为视图函数app.add_url_rule('/myview/',view_func=MyView.as_view('myview'))2.2 【Why】为什么需要类视图代码复用:通过继承抽取公共逻辑(如统一 JSON 序列化、统一鉴权)。结构清晰:将相关逻辑封装在类中,比函数视图更有组织性。但并非所有场景都需要:简单视图用函数更直接。2.3 【How】继承示例:统一返回 JSONfromflaskimportFlask,jsonifyfromflask.viewsimportView app=Flask(__name__)classBaseJSONView(View):"""父类:统一返回 JSON 格式"""defget_data(self):raiseNotImplementedError('子类必须实现 get_data()')defdispatch_request(self):returnjsonify(self.get_data())classUserView(BaseJSONView):defget_data