目录
- Flask - Flask的蓝图(BluePrint)
- 一. 初始Flask蓝图
- 进阶Flask蓝图
- 使用蓝图做一个增删改查
- 1.使用蓝图进行web应用搭建:
- 2.使用Flask蓝图,查看学生信息
- 3. 使用Flask蓝图,添加一个学生
- 4. 使用Flask蓝图,修改学生信息
- 5. 蓝图目录
Flask - Flask的蓝图(BluePrint)
百度说蓝图这个词有两个意思:
1.通常用铁氰化和铁盐敏化的纸或布,曝光后用清水冲洗显影晒成的蓝底白图的相纸,特别供晒印地图、机械图、建筑图样用。
2.一个详细的、各部分完全协调的计划或行动规划。
但是跟Flask的蓝图没有一毛关系~
它的作用就是将 功能 与 主服务 分开怎么理解呢?
比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块,
然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将
查看客户,修改客户,添加客户,删除客户的四个功能做成蓝图加入到客户管理系统中,本篇最后会做一个这样的例子,但是首先我们要搞清楚什么是蓝图 blueprint
一. 初始Flask蓝图
创建一个项目然后将目录结构做成:
s_view.py 文件中的内容
from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 sv = Blueprint("sv", __name__) # 实例化一个蓝图(Blueprint)对象 @sv.route("/svlist") # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的 def view_list(): return "svlist_view_list"
manager.py 文件中的内容
from flask import Flask # 导入此前写好的蓝图模块 from student_view import s_view app = Flask(__name__) # type:Flask # 在Flask对象中注册蓝图模块中的蓝图对象 s_view 中的 sv app.register_blueprint(s_view.sv) app.run("0.0.0.0",5000) # 现在Flask对象中并没有写任何的路由和视图函数
开启服务,然后访问 http://127.0.0.1:5000/svlist 查看结果
很明显,我们没有在Flask对象中添加路由,但是我们注册了有路由和视图函数的sv蓝图对象
进阶Flask蓝图
目录结构:
s_view.py 文件中的内容 : from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块 from flask import render_template sv = Blueprint("sv", __name__, template_folder="sv_template", # 每个蓝图都可以为自己独立出一套template模板文件夹,如果不写则共享项目目录中的templates static_folder="sv_static" # 静态文件目录也是可以独立出来的 ) # 实例化一个蓝图(Blueprint)对象 @sv.route("/svlist") def view_list(): return render_template("svlist.html")
svlist.html 文件中的内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> Hello ! I am sv_template <img src="/sv_static/DragonFire.png"> </body> </html>
访问 127.0.0.1:5000/svlist 即可显示页面.
注意:蓝图内部的视图函数及route不要出现重复
使用蓝图做一个增删改查
1.使用蓝图进行web应用搭建:
init.py 文件中的内容:
from flask import Flask def create_app(): app = Flask(__name__) return app
这个文件我们会修改函数 create_app中的代码
manager.py 文件中的内容
from student import create_app flask_app = create_app() flask_app.run("0.0.0.0",5000)
通过这种方式启动 Flask 程序
2.使用Flask蓝图,查看学生信息
s_list.html 文件中的内容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学生列表</title> </head> <body> <table border="3xp"> <thead> <tr> <td>ID</td> <td>name</td> <td>age</td> <td>gender</td> <td>options</td> </tr> </thead> <tbody> {% for foo in student %} <tr> <td>{{ foo.id }}</td> <td>{{ foo["name"] }}</td> <td>{{ foo.get("age") }}</td> <td>{{ foo.gender }}</td> <td> <a href="/s_update/{{ foo.id }}">修改</a> | <a href="/s_del?id={{ foo.id }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> <a href="/s_add"> 添加学生 </a> </body> </html>
stu_select.py 文件中的内容:
from flask import Blueprint from flask import render_template from student_data import STUDENT ss_blueprint = Blueprint("ss_b", __name__, template_folder="html", static_folder="static") @ss_blueprint.route("/s_list") def s_list(): return render_template("s_list.html", student=STUDENT)
student/init.py 文件中的内容:
from flask import Flask from student_select import stu_select def create_app(): app = Flask(__name__) # type:Flask app.register_blueprint(stu_select.ss_blueprint) return app
赶紧运行一下manager.py 来访问一下,我们的成果
3.使用Flask蓝图,添加一个学生
s_add.html 文件中的内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学生列表</title> </head> <body> <form method="post"> ID:<input type="text" name="id"> <br> 姓名:<input type="text" name="name"><br> 年龄:<input type="text" name="age"><br> 性别:<input type="text" name="gender"><br> <input type="submit" value="添加学生"> </form> </body> </html>
stu_add.py 文件中的内容
from flask import Blueprint from flask import redirect from flask import request from flask import render_template from student_data import STUDENT s_add = Blueprint("s_add", __name__, template_folder="html", static_folder="static") # type:Blueprint @s_add.route("/s_add",methods=["GET","POST"]) def s_add_view(): if request.method == "POST": stu_dic = { "id": request.form["id"], "name": request.form["name"], "age": request.form["age"], "gender": request.form["gender"] } STUDENT.append(stu_dic) return redirect("/s_list") return render_template("s_add.html")
这里面我们让他添加完一个学生,就返回到s_list查看学生列表
student/init.py 文件中的内容
from flask import Flask from student_select import stu_select from student_add import stu_add def create_app(): app = Flask(__name__) # type:Flask app.register_blueprint(stu_select.ss_blueprint) app.register_blueprint(stu_add.s_add) return app
如果你要是重新启动服务了,那么你刚刚添加的学生信息就没有了
4.使用Flask蓝图,修改学生信息
s_update.html 文件中的内容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学生列表</title> </head> <body> <form method="post"> <input type="text" name="id" hidden value="{{ student.id }}"><br> 姓名:<input type="text" name="name" value="{{ student.name }}"><br> 年龄:<input type="text" name="age" value="{{ student.age }}"><br> 性别:<input type="text" name="gender" value="{{ student.gender }}"><br> <input type="submit" value="修改信息"> </form> </body> </html>
stu_update.py 文件中的内容:
from flask import Blueprint from flask import render_template from flask import redirect from flask import request from student_data import STUDENT s_update = Blueprint("s_update", __name__, template_folder="html", static_folder="static") @s_update.route("/s_update/<int:nid>",methods=["GET","POST"]) def s_update_view(nid): if request.method == "POST": stu_id = int(request.form["id"]) stu_dic = { "id": stu_id, "name": request.form["name"], "age": request.form["age"], "gender": request.form["gender"] } for index,stu in enumerate(STUDENT): if stu["id"] == stu_id: STUDENT[index] = stu_dic return redirect("/s_list") for stu in STUDENT: if stu["id"] == nid : return render_template("s_update.html", student=stu) return render_template("s_update.html", student="")
student/init.py 文件中的内容:
from flask import Flask from student_select import stu_select from student_add import stu_add from student_update import stu_update def create_app(): app = Flask(__name__) # type:Flask app.register_blueprint(stu_select.ss_blueprint) app.register_blueprint(stu_add.s_add) app.register_blueprint(stu_update.s_update) return app
试一下结果:
删除自己做吧..
5.蓝图目录
app/init.py
from flask import Flask from .views.auto import auto_bp from .views.motor import motor_bp def create_app(): my_app = Flask(__name__) # type:Flask my_app.register_blueprint(auto_bp) my_app.register_blueprint(motor_bp) return my_app
由此见得__init__.py就是构建app的一个函数,并且将views中的似乎是蓝图的东西注册进去了
接下来看static目录,这个目录从字面意思就可以理解了,就是我们的static静态文件存放目录了
然后就是templates目录,模板存放目录
views目录,主角终于登场了,这里存放的就是视图函数文件,也就是我们Blueprint,每一个文件就是一个Blueprint
views/auto.py
1 from flask import Blueprint 2 3 auto_bp = Blueprint("auto",__name__) 4 5 @auto_bp.route("/auto") 6 def auto_func(): 7 return "my_app.auto"
views/motor.py
1 from flask import Blueprint 2 3 motor_bp = Blueprint("motor",__name__) 4 5 @motor_bp.route("/motor") 6 def motor_func(): 7 return "my_app.motor"
mnager.py
1 from app import create_app 2 my_app = create_app() 3 4 if __name__ == '__main__': 5 my_app.run()
- from student import create_app
-
- flask_app = create_app()
-
- flask_app.run("0.0.0.0",5000)
通过这种方式启动 Flask 程序
2.使用Flask蓝图,查看学生信息
s_list.html 文件中的内容:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>学生列表</title>
- </head>
- <body>
- <table border="3xp">
- <thead>
- <tr>
- <td>ID</td>
- <td>name</td>
- <td>age</td>
- <td>gender</td>
- <td>options</td>
- </tr>
- </thead>
- <tbody>
- {% for foo in student %}
- <tr>
- <td>{{ foo.id }}</td>
- <td>{{ foo["name"] }}</td>
- <td>{{ foo.get("age") }}</td>
- <td>{{ foo.gender }}</td>
- <td> <a href="/s_update/{{ foo.id }}">修改</a> | <a href="/s_del?id={{ foo.id }}">删除</a> </td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- <a href="/s_add"> 添加学生 </a>
- </body>
- </html>
stu_select.py 文件中的内容:
- from flask import Blueprint
- from flask import render_template
- from student_data import STUDENT
-
- ss_blueprint = Blueprint("ss_b", __name__, template_folder="html", static_folder="static")
-
-
- @ss_blueprint.route("/s_list")
- def s_list():
- return render_template("s_list.html", student=STUDENT)
student/init.py 文件中的内容:
- from flask import Flask
- from student_select import stu_select
-
-
- def create_app():
- app = Flask(__name__) # type:Flask
-
- app.register_blueprint(stu_select.ss_blueprint)
-
- return app
赶紧运行一下manager.py 来访问一下,我们的成果
3. 使用Flask蓝图,添加一个学生
s_add.html 文件中的内容
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>学生列表</title>
- </head>
- <body>
- <form method="post">
- ID:<input type="text" name="id"> <br>
- 姓名:<input type="text" name="name"><br>
- 年龄:<input type="text" name="age"><br>
- 性别:<input type="text" name="gender"><br>
- <input type="submit" value="添加学生">
- </form>
-
- </body>
- </html>
stu_add.py 文件中的内容
- from flask import Blueprint
- from flask import redirect
- from flask import request
- from flask import render_template
- from student_data import STUDENT
-
- s_add = Blueprint("s_add", __name__, template_folder="html", static_folder="static") # type:Blueprint
-
-
- @s_add.route("/s_add",methods=["GET","POST"])
- def s_add_view():
- if request.method == "POST":
- stu_dic = {
- "id": request.form["id"],
- "name": request.form["name"],
- "age": request.form["age"],
- "gender": request.form["gender"]
- }
-
- STUDENT.append(stu_dic)
-
- return redirect("/s_list")
-
- return render_template("s_add.html")
这里面我们让他添加完一个学生,就返回到s_list查看学生列表
student/init.py 文件中的内容
- from flask import Flask
- from student_select import stu_select
- from student_add import stu_add
-
-
- def create_app():
- app = Flask(__name__) # type:Flask
-
- app.register_blueprint(stu_select.ss_blueprint)
- app.register_blueprint(stu_add.s_add)
-
- return app
如果你要是重新启动服务了,那么你刚刚添加的学生信息就没有了
4. 使用Flask蓝图,修改学生信息
s_update.html 文件中的内容:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>学生列表</title>
- </head>
- <body>
- <form method="post">
- <input type="text" name="id" hidden value="{{ student.id }}"><br>
- 姓名:<input type="text" name="name" value="{{ student.name }}"><br>
- 年龄:<input type="text" name="age" value="{{ student.age }}"><br>
- 性别:<input type="text" name="gender" value="{{ student.gender }}"><br>
- <input type="submit" value="修改信息">
- </form>
-
- </body>
- </html>
stu_update.py 文件中的内容:
- from flask import Blueprint
- from flask import render_template
- from flask import redirect
- from flask import request
- from student_data import STUDENT
-
- s_update = Blueprint("s_update", __name__, template_folder="html", static_folder="static")
-
-
- @s_update.route("/s_update/<int:nid>",methods=["GET","POST"])
- def s_update_view(nid):
- if request.method == "POST":
- stu_id = int(request.form["id"])
- stu_dic = {
- "id": stu_id,
- "name": request.form["name"],
- "age": request.form["age"],
- "gender": request.form["gender"]
- }
-
- for index,stu in enumerate(STUDENT):
- if stu["id"] == stu_id:
- STUDENT[index] = stu_dic
-
- return redirect("/s_list")
-
- for stu in STUDENT:
- if stu["id"] == nid :
- return render_template("s_update.html", student=stu)
-
- return render_template("s_update.html", student="")
student/init.py 文件中的内容:
- from flask import Flask
- from student_select import stu_select
- from student_add import stu_add
- from student_update import stu_update
-
-
- def create_app():
- app = Flask(__name__) # type:Flask
-
- app.register_blueprint(stu_select.ss_blueprint)
- app.register_blueprint(stu_add.s_add)
- app.register_blueprint(stu_update.s_update)
-
- return app
试一下结果:
删除自己做吧..
5. 蓝图目录
app/init.py
- 1 from flask import Flask
- 2 from .views.auto import auto_bp
- 3 from .views.motor import motor_bp
- 4
- 5
- 6 def create_app():
- 7 my_app = Flask(__name__) # type:Flask
- 8
- 9 my_app.register_blueprint(auto_bp)
- 10 my_app.register_blueprint(motor_bp)
- 11
- 12 return my_app
由此见得__init__.py就是构建app的一个函数,并且将views中的似乎是蓝图的东西注册进去了
接下来看static目录,这个目录从字面意思就可以理解了,就是我们的static静态文件存放目录了
然后就是templates目录,模板存放目录
views目录,主角终于登场了,这里存放的就是视图函数文件,也就是我们Blueprint,每一个文件就是一个Blueprint
views/auto.py
- 1 from flask import Blueprint
- 2
- 3 auto_bp = Blueprint("auto",__name__)
- 4
- 5 @auto_bp.route("/auto")
- 6 def auto_func():
- 7 return "my_app.auto"
views/motor.py
- 1 from flask import Blueprint
- 2
- 3 motor_bp = Blueprint("motor",__name__)
- 4
- 5 @motor_bp.route("/motor")
- 6 def motor_func():
- 7 return "my_app.motor"
mnager.py
- 1 from app import create_app
- 2 my_app = create_app()
- 3
- 4 if __name__ == '__main__':
- 5 my_app.run()
昵称:
退出 订阅评论
[Ctrl+Enter快捷键提交]
【推荐】Java工作两年,一天竟收到33份面试通知
【推荐】程序员问答平台,解决您开发中遇到的技术难题
· Flask中的蓝图(BluePrint)
· 9,Flask中的蓝图(BluePrint)
· flask第九篇蓝图Blueprint
· Flask最强攻略-跟DragonFire学Flask-第九篇Flask中的蓝图(BluePrint)
· Flask第九篇Flask中的蓝图(BluePrint)
· 疟疾防治新突破:科学家用转基因真菌灭杀99%的蚊子
· 20年前 微软如何颠覆了我们使用鼠标的方式?
· 为何宝马和苹果都对这种元素情有独钟?
· 阿里速度:教育解决方案上线3月,钉钉抢占4万所中小学
· 马斯克的使命DNA
» 更多新闻...