Flask Blueprint


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>
show_page

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>
add_user

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>
edit_user

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'))

 頁面展示如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM