目錄html
做用就是將功能與主服務分開,藍圖沒有run方法python
好比說,你有一個客戶管理系統,最開始的時候,只有一個查看客戶列表的功能,後來你又加入了一個添加客戶的功能(add_user)模塊, 而後又加入了一個刪除客戶的功能(del_user)模塊,而後又加入了一個修改客戶的功能(up_user)模塊,在這個系統中,就能夠將web
把查看客戶,修改客戶,添加客戶,刪除客戶的四個功能作成藍圖加入到客戶管理系統中,這樣就實現了單個應用模板與主服務器分開管理flask
manager.py文件:服務器
from flask import Flask, render_template # 導入此前寫好的藍圖模塊 from student_view import view_list app = Flask(__name__) app.debug = True # 在Flask對象中註冊藍圖模塊中的藍圖對象 view_list 中的 show app.register_blueprint(view_list.show) if __name__ == '__main__': # 如今Flask對象中並無寫任何的路由和視圖函數 app.run()
藍圖應用把主服務分開,新建立一個student_view文件夾放藍圖單獨的py文件app
建立一個view_list.py文件:函數
from flask import Blueprint # 導入 Flask 中的藍圖 Blueprint 模塊 show = Blueprint("sv", __name__) # 實例化一個藍圖(Blueprint)對象 @show.route("/show_list") # 這裏添加路由和視圖函數的時候與在Flask對象中添加是同樣的 def show_list(): return "show_list"
web訪問:post
s_view.py 文件中的內容 :debug
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 文件中的內容3d
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> Hello ! I am sv_template <img src="/sv_static/123.png"> </body> </html>
使用Flask藍圖,修改學生信息,視圖結構以下:
建立一個student_select文件夾:
student_select/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_select/html/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>
建立一個student_update文件夾:
student_update/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_update/html/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>
建立一個student_add文件夾:
student_add/stu_add.py文件中的內容:
from flask import Blueprint, redirect, render_template, request from student_data import STUDENT s_add = Blueprint("s_add", __name__, template_folder="html", static_folder="static") @s_add.route("/s_add", methods=["POST", "GET"]) def s_add_view(): if request.method == "POST": stu_dic = { "id": request.form.get("id"), "name": request.form.get("name"), "age": request.form.get("age"), "gender": request.form.get("gender") } STUDENT.append(stu_dic) return redirect("/s_list") else: return render_template("s_add.html")
student_add/html/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>
建立一個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
總文件夾下:FlaskBluePrint/manager.py 文件中的內容:
from student import create_app flask_app = create_app() if __name__ == '__main__': flask_app.run()
總文件夾下:FlaskBluePrint/student_data.py 文件中的內容:
# 存放學生信息 STUDENT = [ {'id': 1, 'name': 'lisa', 'age': 38, 'gender': '中'}, {'id': 2, 'name': 'egon', 'age': 73, 'gender': '男'}, {'id': 3, 'name': 'annie', 'age': 84, 'gender': '女'} ]
以上就是咱們Flask小型應用的項目結構目錄!!!