Flask博客实战 - 创建后台管理应用

这篇博客对比了Flask和Django在后台管理应用上的差异,强调Flask的自由度。通过创建admin模块,定义视图和模板,展示了如何在Flask中手工构建管理后台,包括主页和分类管理等功能。最终效果包括多个管理页面,目前不涉及权限控制。

Flask与django最大的不同就在这里,django的理念是快速开发,所以他尽可能多的帮我们集成了所有web的功能,包括了一个强大的admin后台管理系统!

而Flask倡导的是自由度,因此无论大小的系统,只要牵扯到数据管理的增删改查的地方都要我们手动去实现,当然Flask也有对应的第三方扩展,但本教程更多的是让大家熟悉Flask,而不是学习扩展,所以我们不回去用第三方扩展来实现这里的功能!

创建后台管理应用admin

app/目录下创建一个admin/模块目录,与blog和auth模块的目录结构一致,也就是我们所说的应用!目录结构如下:

app/
    admin/
        __init__.py
        forms.py
        models.py
        views.py
        templates/
        static/

创建各功能视图

创建admin主页视图

在app/admin/views.py中创建如下代码

from unicodedata import name
from flask import Blueprint, flash, redirect, render_template, request, url_for
from ..auth.views.auth import login_required
from RealProject import db


bp = Blueprint('admin', __name__, url_prefix='/admin', 
    template_folder='templates', static_folder='static')


@bp.route('/')
@login_required
def index():
    # 主页视图
    return render_template('admin/index.html')

在app/admin/templates/admin/目录下创建index.html

{% extends 'base.html' %}

{% block title %}
{{ g.user['username'] }}-个人中心
{% endblock title %}

{% block hero %}{% endblock hero %}

{% block box %}
<div class="columns">
    <div class="column is-2">
        <div class="card is-shadowless" style="border-right:solid 1px #eee">
            <div class="card-content">
                <aside class="menu">
                    <p class="menu-label">
                        仪表板
                    </p>
                    <ul class="menu-list">
                        <li><a class="{% if request.path == '/admin/' %}is-active{% endif %}"
                            href="{{ url_for('admin.index') }}">主页</a></li>
                        <!-- <li><a>Customers</a></li> -->
                    </ul>
                    <p class="menu-label">
                        博客分类
                    </p>
                    <ul class="menu-list">
                        <li><a href="">分类管理</a></li>
                    </ul>
                    <p class="menu-label">
                        文章管理
                    </p>
                    <ul class="menu-list">
                        <li><a href="">文章管理</a></li>
                    </ul>
                    <p class="menu-label">
                        用户管理
                    </p>
                    <ul class="menu-list">
                        <li><a>用户管理</a></li>
                        <li><a>修改密码</a></li>
                    </ul>
                </aside>
            </div>
        </div>
    </div>
    <div class="column">
        {% block member %}
        <div class="tile is-ancestor">
            <div class="tile is-parent">
                <article class="tile is-child notification is-info is-light">
                    <div class="content">
                        <p class="title">100</p>
                        <p class="subtitle">文章数</p>
                        <div class="content">
                            <!-- Content -->
                        </div>
                    </div>
                </article>
            </div>
            <div class="tile is-parent">
                <article class="tile is-child notification is-success is-light">
                    <div class="content">
                        <p class="title">50</p>
                        <p class="subtitle">用户数</p>
                        <div class="content">
                            <!-- Content -->
                        </div>
                    </div>
                </article>
            </div>
            <div class="tile is-parent">
                <article class="tile is-child notification is-warning is-light">
                    <div class="content">
                        <p class="title">150</p>
                        <p class="subtitle">评论数</p>
                        <div class="content">
                            <!-- Content -->
                        </div>
                    </div>
                </article>
            </div>
        </div>
        {% endblock member %}
    </div>
</div>
{% endblock box %}

最后,别忘了在项目目录RealProject/init.py中注册该管理后台的蓝图

def register_bp(app:Flask):
    # 注册视图方法
    from app.blog import views as blog
    from app.auth import views as auth
    # 管理后台视图
    from app.admin import views as admin
    app.register_blueprint(blog.bp) 
    app.register_blueprint(auth.bp)

    # 注册管理后台的蓝图
    app.register_blueprint(admin.bp)  
    app.add_url_rule(rule='/', endpoint='index', view_func=blog.index)

至此,我们的管理后台主页以及大的框架就搭建完成,下一章节我们将通过分类管理的增删改查来学习如何深度的利用Flask-WTF及Flask-sqlalchemy两个扩展实现我们的基本业务需求!

最终效果展示

管理后台我们将大概分类为如下几个:

  • 主页

 

  • 分类管理

 

 

  • 文章管理
  • 草稿箱
  • 用户管理

那么,最终的几个页面基本上都与这几个布局和样式一致,尽可能的以最简单的代码和最明了的逻辑处理我们的业务,这一部分我们目前不考虑权限的问题,到最后我们再统一处理权限!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值