06-06 会员管理

后台管理中涉及到的会员管理功能为: 会员列表, 会员查看, 会员删除. 因此不涉及表单提交, 没有form类.

本节涉及展示会员列表, 需要插入会员数据.可以自己插入,也可以先学习 "第8章 会员模块实现" 后再反过来进行本节学习!

关注点:

  • 会员删除视图函数中的如何删除内存中存下的文件?
    if user.face is not None and os.path.exists(os.path.join(app.config["FC_DIR"], user.face)):  # 删除磁盘旧文件
        os.remove(os.path.join(app.config["FC_DIR"], user.face))

 

  • 会员列表和会员查看中当该会员没有头像时如何显示?
{% if v.face %}
<img src="{{ url_for('static', filename='uploads/users/'+v.face) }}" style="width:60px" class="img-responsive center-block" alt="">
{% else %}
<img data-src="holder.js/60x60" class="img-responsive center-block" alt="">
{% endif %}

 

视图函数

 视图函数movie2101/app/admin/views.py文件涉及到的三个视图函数如下:

# 会员管理视图函数 会员列表
@admin.route("/user/list/<int:page>", methods=['GET'])
@admin_login_req
def user_list(page=None):
    if page is None:
        page = 1
    page_data = User.query.order_by(
        User.addtime.desc()
    ).paginate(page=page, per_page=10)
    return render_template("admin/user_list.html", page_data=page_data)

# 会员查看
@admin.route("/user/view/<int:id>", methods=['GET'])
@admin_login_req
def user_view(id=None):
    user = User.query.get_or_404(int(id))
    return render_template("admin/user_view.html", user=user)

# 会员删除
@admin.route("/user/del/<int:id>", methods=['GET'])
@admin_login_req
def user_del(id=None):
    user = User.query.get_or_404(int(id))

    if user.face is not None and os.path.exists(os.path.join(app.config["FC_DIR"], user.face)):  # 删除磁盘旧文件
        os.remove(os.path.join(app.config["FC_DIR"], user.face))

    db.session.delete(user)
    db.session.commit()
    flash("删除会员成功!", "ok")
    # return render_template("admin/user_list.html", page=1)            # 会报错 jinja2.exceptions.UndefinedError: 'page_data' is undefined
    return redirect(url_for("admin.user_list", page=1))

 

会员列表html

movie2101/app/templates/admin/user_list.html文件涉及内容如下:

{% extends "admin/admin.html" %}
{% import "ui/admin_page.html" as pg %}

{% block content %}
<!--内容-->
<section class="content-header">
    <h1>微电影管理系统</h1>
    <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> 会员管理</a></li>
        <li class="active">会员列表</li>
    </ol>
</section>
<section class="content" id="showcontent">
    <div class="row">
        <div class="col-md-12">
            <div class="box box-primary">
                <div class="box-header">
                    <h3 class="box-title">会员列表</h3>
                    <div class="box-tools">
                        <div class="input-group input-group-sm" style="width: 150px;">
                            <input type="text" name="table_search" class="form-control pull-right"
                                   placeholder="请输入关键字...">

                            <div class="input-group-btn">
                                <button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
                                </button>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="box-body table-responsive no-padding">
                    {% for msg in get_flashed_messages(category_filter=["ok"]) %}
                    <div class="alert alert-success alert-dismissible">
                        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                        <h4><i class="icon fa fa-check"></i>操作成功!</h4>
                        {{ msg }}
                    </div>
                    {% endfor %}
                    {% for msg in get_flashed_messages(category_filter=["err"]) %}
                    <div class="alert alert-danger alert-dismissible">
                        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                        <h4><i class="icon fa fa-ban"></i> 操作失败!</h4>
                        {{ msg }}
                    </div>
                    {% endfor %}
                    <table class="table table-hover">
                        <tbody>
                        <tr>
                            <th>编号</th>
                            <th>昵称</th>
                            <th>邮箱</th>
                            <th>手机</th>
                            <th>头像</th>
                            <th>状态</th>
                            <th>注册时间</th>
                            <th>操作事项</th>
                        </tr>
                        {% for v in page_data.items %}
                        <tr>
                            <td>{{ v.id }}</td>
                            <td>{{ v.name }}</td>
                            <td>{{ v.email }}</td>
                            <td>{{ v.phone }}</td>
                            <td>
                                {% if v.face %}
                                <img src="{{ url_for('static', filename='uploads/users/'+v.face) }}" style="width:60px" class="img-responsive center-block" alt="">
                                {% else %}
                                <img data-src="holder.js/60x60" class="img-responsive center-block" alt="">
                                {% endif %}
                            </td>
                            <td>正常/冻结</td>
                            <td>{{ v.addtime }}</td>
                            <td>
                                <a class="label label-success" href="{{ url_for('admin.user_view', id=v.id)}}">查看</a>
                                &nbsp;
                                <a class="label label-info">解冻</a>
                                &nbsp;
                                <a class="label label-warning">冻结</a>
                                &nbsp;
                                <a class="label label-danger" href="{{ url_for('admin.user_del', id=v.id)}}">删除</a>
                            </td>
                        </tr>
                        {% endfor %}
                        </tbody>
                    </table>
                </div>
                <div class="box-footer clearfix">
                    {{ pg.page(page_data, 'admin.user_list') }}
                </div>
            </div>
        </div>
    </div>
</section>
<!--内容-->
{% endblock %}

{% block js %}
<script>
    $(document).ready(function () {
        $("#g-5").addClass("active");
        $("#g-5-1").addClass("active")
    })
</script>
{% endblock %}

 

会员查看html

 movie2101/app/templates/admin/user_view.html文件涉及内容如下:

{% extends "admin/admin.html" %}

{% block css %}
<style>
    .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
        vertical-align: middle;
        text-align: left;
    }

    .td_bd {
        font-weight: bold;
    }
</style>
{% endblock %}

{% block content %}
<!--内容-->
<section class="content-header">
    <h1>微电影管理系统</h1>
    <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> 会员管理</a></li>
        <li class="active">查看会员</li>
    </ol>
</section>
<section class="content" id="showcontent">
    <div class="row">
        <div class="col-md-12">
            <div class="box box-primary">
                <div class="box-header">
                    <h3 class="box-title">会员详情</h3>
                </div>
                <div class="box-body table-responsive no-padding">
                    <table class="table table-hover">
                        <tbody>
                        <tr>
                            <td class="td_bd">编号:</td>
                            <td>{{ user.id }}</td>
                        </tr>
                        <tr>
                            <td class="td_bd">昵称:</td>
                            <td>{{ user.name }}</td>
                        </tr>
                        <tr>
                            <td class="td_bd">邮箱:</td>
                            <td>{{ user.email }}</td>
                        </tr>
                        <tr>
                            <td class="td_bd">手机:</td>
                            <td>{{ user.phone }}</td>
                        </tr>
                        <tr>
                            <td class="td_bd">头像:</td>
                            <td>
                                {% if user.face %}
                                <img src="{{ url_for('static', filename='uploads/users/'+user.face) }}" style="width: 100px" class="img-responsive" alt="">
                                {% else %}
                                <img data-src="holder.js/100x100" class="img-responsive img-rounded">
                                {% endif %}
                            </td>
                        </tr>
                        <tr>
                            <td class="td_bd">注册时间:</td>
                            <td>
                                {{ user.addtime }}
                            </td>
                        </tr>
                        <tr>
                            <td class="td_bd">唯一标志符:</td>
                            <td>
                                {{ user.addtime }}
                            </td>
                        </tr>
                        <tr>
                            <td class="td_bd">个性简介:</td>
                            <td>
                                {{ user.info }}
                            </td>
                        </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</section>
<!--内容-->
{% endblock %}

{% block js %}
<script>
    $(document).ready(function () {
        $("#g-5").addClass("active");
        $("#g-5-1").addClass("active")
    })
</script>
{% endblock %}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值