Blueprint簡介
Blueprint它是Flask項目的一種組件式開發,可以在一個應用內或跨越 多個項目共用藍圖。使用藍圖可以極大地簡化大型應用的開發難度,也為Flask擴展 提供了一種在應用中注冊服務的集中式機制。 模塊化管理程序路由是它的特色,它使程序結構清晰、簡單易懂。但是一個Blueprint並不是一個完整的應用,它不能獨立於應用運行,而必須要注冊到某一個應用中。
由於只是演示藍圖的基本用法,所以這里以展示用戶表,登陸認證,編輯用戶,刪除用戶,新增用戶來模擬多個模塊作為演示。
環境搭建:
1、創建項目damo_2,在該項目下創建static(存放圖片,css樣式,js腳本等)、templates(HTML文件)兩個目錄。
2、新建一個settings.py的配置文件,配置文件中存放用戶表
USER_INFO = [{'aaa':'111'},{'bbb':'222'},{'ccc':'333'}] # 模擬數據庫中的用戶表
一、函數的方式(FBV):
1、展示用戶表
1.1創建show.py
from flask import Blueprint,render_template from settings import USER_INFO show_app = Blueprint('show_app',__name__) @show_app.route('/show_page') def show_page(): return render_template('show_page.html',user_info=USER_INFO)
1.2在templates目錄下創建show_page.html
<html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3 style="margin-left: 320px">用戶詳情表</h3> <form action=""> <table border="1px"> <thead> <tr> <th style="width: 150px;">序號</th> <th style="width: 150px;">用戶</th> <th style="width: 150px;">密碼</th> <th style="width: 150px;">操作</th> </tr> </thead> <tbody> {% for user_dict in user_info %} <tr> <td style="text-align: center">{{ loop.index0 }}</td> {% for user in user_dict %} <td style="text-align: center">{{ user }}</td> <td style="text-align: center">{{ user_dict.get(user) }}</td> {% endfor %} <td style="text-align: center"> <a href="/edit_user?id={{ loop.index0 }}">編輯</a> | <a href="/del_user?id={{ loop.index0 }}">刪除</a> </td> </tr> {% endfor %} </tbody> </table> <br> <a href="/add_user">新增</a> </form> </body> </html>
2、新增用戶
2.1創建add_user.py
from flask import Blueprint, request, render_template, redirect from settings import USER_INFO add_user_app = Blueprint('add_user', '__name__') @add_user_app.route('/add_user', methods=['GET', 'POST']) def add_user(): if request.method == 'POST': user = request.form.get('username') pwd = request.form.get('password') USER_INFO.append({user: pwd}) return redirect('/show_page') else: return render_template('add_user.html')
2.2在templates目錄下創建add_user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> <h3>新增用戶界面</h3> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <button>新增</button> </form> </body> </html>
3、編輯用戶
3.1創建edit_user.py文件
from flask import Blueprint, render_template, request, redirect from settings import USER_INFO edit_user_app = Blueprint('edit_user', '__name__') @edit_user_app.route('/edit_user', methods=['GET', 'POST']) def edit_user(): uid = int(request.args.get('id')) if request.method == 'POST': user = request.form.get('username') pwd = request.form.get('password') nlen = len(USER_INFO) if 0 > uid or uid >= nlen: return f'索引不存在,索引范圍是:0-{nlen - 1}' else: USER_INFO[uid] = {user: pwd} return redirect('/show_page') else: user_info = USER_INFO[uid] return render_template('edit_user.html', user_info=user_info)
3.2在templates目錄下創建edit_user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> <h3>編輯用戶界面</h3> {% for user in user_info %} 用戶名:<input type="text" name="username" value="{{ user }}"> 密碼:<input type="password" name="password" value="{{ user_info[user] }}"> {% endfor %} <button>保存</button> </form> </body> </html>
4、刪除用戶
4.1創建del_user.py
from flask import Blueprint,request,render_template,redirect from settings import USER_INFO del_user_app = Blueprint('del_user','__name__') @del_user_app.route('/del_user') def del_user(): uid = int(request.args.get('id')) USER_INFO.pop(uid) return redirect('/show_page')
5、創建damo_2.py主文件
from flask import Flask, session, request, redirect, render_template from flask import session from show import show_app from index import index_app from add_user import add_user_app from del_user import del_user_app from edit_user import edit_user_app from login import login_app user_app = Flask('__name__') user_app.secret_key = '~!@#$%^&*' user_app.config['DEBUG'] = True @user_app.before_request def session_check(): # 中間件用戶登陸認證,用戶必須登錄后才能訪問展示頁面 if session.get('user') or request.path == '/login': return None else: return redirect('/login') @user_app.after_request def response_after(response): return response user_app.register_blueprint(index_app) # 注冊公共展示頁面 user_app.register_blueprint(show_app) # 注冊用戶詳情頁面 user_app.register_blueprint(add_user_app) # 注冊新增用戶頁面 user_app.register_blueprint(del_user_app) # 注冊刪除用戶頁面 user_app.register_blueprint(edit_user_app) # 注冊編輯用戶頁面 user_app.register_blueprint(login_app) # 注冊用戶登陸頁面 @user_app.errorhandler(404) # 404錯誤頁面 def error404(error_msg): return render_template('error404.html') user_app.run()
二、使用類的方式(CBV)
1、修改展示頁面show.py
from flask import Blueprint, render_template from settings import USER_INFO from flask import views show_app = Blueprint('show_app',__name__) class ShowPage(views.MethodView): def get(self): return render_template('show_page.html', user_info=USER_INFO) show_app.add_url_rule('/show_page', view_func=ShowPage.as_view(name='show_page'))
2、修改新增用戶add_user.py
from flask import Blueprint, request, render_template, redirect from settings import USER_INFO from flask import views add_user_app = Blueprint('add_user', '__name__') class AddUser(views.MethodView): def get(self): return render_template('add_user.html') def post(self): user = request.form.get('username') pwd = request.form.get('password') USER_INFO.append({user: pwd}) return redirect('/show_page') add_user_app.add_url_rule('/add_user',view_func=AddUser.as_view(name='add_user'))
3、修改編輯用戶edit_user.py
from flask import Blueprint, render_template, request, redirect from settings import USER_INFO from flask import views edit_user_app = Blueprint('edit_user', '__name__') class EditUser(views.MethodView): def get(self): uid = int(request.args.get('id')) user_info = USER_INFO[uid] return render_template('edit_user.html', user_info=user_info) def post(self): uid = int(request.args.get('id')) user = request.form.get('username') pwd = request.form.get('password') nlen = len(USER_INFO) if 0 > uid or uid >= nlen: return f'索引不存在,索引范圍是:0-{nlen - 1}' else: USER_INFO[uid] = {user: pwd} return redirect('/show_page') edit_user_app.add_url_rule('/edit_user',view_func=EditUser.as_view(name='edit_view'))
4、修改刪除用戶del_user.py
from flask import Blueprint,request,render_template,redirect from settings import USER_INFO from flask import views del_user_app = Blueprint('del_user','__name__') class DelUser(views.MethodView): def get(self): uid = int(request.args.get('id')) USER_INFO.pop(uid) return redirect('/show_page') del_user_app.add_url_rule('/del_user',view_func=DelUser.as_view(name='del_user'))
頁面展示如下:

