基于flask的微电影管理系统——前台管理(2)

6-5 退出登录的视图函数

@home.route('/logout/')
@is_login
def logout():
    session.pop('user_id', None)
    session.pop('user', None)

    return redirect(url_for('home.login'))

由于退出登录只跟sesson信息有关,则不必有页面实现

6-6 用户主页的视图函数

@home.route('/user/', methods=['GET', 'POST'])
@is_login
def user():
    form = EditUserForm()
    # 先在页面表单显示用户已经填写的信息
    user = User.query.filter_by(name=session.get('user')).first()
    form.username.data = user.name
    form.email.data = user.email
    form.phone.data = user.phone
    if form.validate_on_submit():
        # request.form   - 获取表单填写的内容
        username = request.form['username']
        email = request.form['email']
        phone = request.form['phone']
        info = request.form['info']
        # 1. 判断更改的用户名是否已经存在;
        if username != user.name and \
                User.query.filter_by(name=username).count():
            flash("用户名%s已经存在" % (username))
            return redirect(url_for('home.user'))
        # 2. 判断更改的email地址是否已经存在;
        if User.query.filter_by(email=email).count() and \
                email != user.email:
            flash("邮箱%s已经注册" % (email))
            return redirect(url_for('home.user'))
        # 2. 判断更改的电话号码是否已经存在;
        if username != user.name and \
                User.query.filter_by(phone=phone).count():
            flash("电话%s已经注册" % (phone))
            return redirect(url_for('home.user'))

        #  保存更改的信息到数据库中;(难点: 存储用户头像)
        #  *****存储用户的头像;
        file_save_path = app.config['FC_DIR']
        if not os.path.exists(file_save_path):
            os.makedirs(file_save_path)
        # 判断是否上传了新的头像;
        if form.face.data:
            # 判断之前是否已经有用户头像, 如果有, 则删除;
            if user.face and os.path.exists(os.path.join(file_save_path, user.face)):
                os.remove(os.path.join(file_save_path, user.face))  # 删除旧头像

            # 保存新的头像, 获取用户头像文件的文件名
            face_name = form.face.data.filename
            face_name = change_filename(face_name)

            # 保存新的头像文件
            form.face.data.save(os.path.join(file_save_path, face_name))
            user.face = face_name

        user.name = username
        user.email = email
        user.phone = phone
        user.info = info

        db.session.add(user)
        db.session.commit()
        flash("修改会员信息成功")

        # ******修改用户信息, 如果修改的是用户名, 一定要登录出, 再重新登录。

        if username != session.get('user'):
            logout()
        # 如果用户名没有修改,则不必退出
    return render_template('home/user.html',
                           form=form)

页面实现的user.html

{% extends 'home/base.html' %}
{% import 'bootstrap/wtf.html'  as wtf %}

{% block title %}

    用户中心
{% endblock %}


{% block scripts %}
    {{ super() }}

    <script>
        $(document).ready(function () {
            $("#md-1").addClass('active');
        });
    </script>

{% endblock %}

{% block content %}

    <div class="container-fluid">


        {#  左侧菜单栏       #}
        {% include 'home/usermenu.html' %}


        {#  右侧用户中心       #}
        <div class="col-lg-9">
            {#   面板中心          #}
            <div class="panel panel-warning">
                {#   面板头部              #}
                <div class="panel-heading">
                    <h3 class="panel-title"><span class="glyphicon glyphicon-map-marker"></span>&nbsp;会员中心</h3>
                </div>
                {#   面板主体               #}
                <div class="panel-body">
                    {{ wtf.quick_form(form) }}
                </div>
            </div>

        </div>
    </div>

{% endblock %}

若不更改用户名:
在这里插入图片描述
若更改用户名,则退出登录:
在这里插入图片描述
在这里插入图片描述

6-7 修改密码的视图函数

@home.route('/pwd/', methods=['GET', 'POST'])
def pwd():
    form = PwdForm()
    if form.validate_on_submit():
        # 获取当前登录用户的密码
        user = User.query.filter_by(name=session.get('user')).first()

        # 判断用户的旧密码是否正确
        if user.verify_password(form.old_pwd.data):
            #数据库里面的是password,需加密存入
            user.password = generate_password_hash(form.new_pwd.data)
            db.session.add(user)
            db.session.commit()
            flash("密码更新成功")
        else:
            flash("旧密码错误, 请重新输入")
        return redirect(url_for('home.pwd'))
    return render_template('home/pwd.html', form=form)

页面实现的pwd.html

{% extends 'home/base.html' %}
{% import 'bootstrap/wtf.html'  as wtf %}

{% block title %}

    修改密码
{% endblock %}
{% block scripts %}
    {{ super() }}

    <script>
        $(document).ready(function () {
            $("#md-2").addClass('active');
        });
    </script>

{% endblock %}

{% block content %}

    <div class="container-fluid">

        {#  左侧菜单栏       #}
        {% include 'home/usermenu.html' %}


        {#  右侧用户中心       #}
        <div class="col-lg-9">
            {#   面板中心          #}
            <div class="panel panel-warning">
                {#   面板头部              #}
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <span class="glyphicon glyphicon-lock"></span>&nbsp;修改密码
                    </h3>
                </div>
                {#   面板主体               #}
                <div class="panel-body">
                    {{ wtf.quick_form(form) }}
                </div>
            </div>

        </div>
    </div>

{% endblock %}

在这里插入图片描述

6-8 个人评论页面的视图函数

@home.route('/comments/')
@home.route('/comments/<int:page>/')
def comments(page=1):
    # 只能查看自己的所有电影评论信息
    commentsPageObj = Comment.query.filter_by(user_id=session.get('user_id')
                                              ).paginate(page, per_page=app.config['PER_PAGE'])
    return render_template('home/comments.html',
                           commentsPageObj=commentsPageObj)

页面实现的comments.html

{% extends 'home/base.html' %}
{#
参考代码:
    bootstrap媒体对象: https://v3.bootcss.com/components/#panels
    bootstrap面板对象: https://v3.bootcss.com/components/#panels-heading

#}

{% block scripts %}
    {{ super() }}
    <script>
        $(document).ready(function () {
            $("#md-3").addClass('active');
        });
    </script>
{% endblock %}
{% block content %}
    <div class="container-fluid">

        {% include 'home/usermenu.html' %}

        <div class="col-md-9">
            <div class="panel panel-warning">
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <span class="glyphicon glyphicon-map-marker"></span>
                        &nbsp;评论记录</h3>
                </div>
                <div class="panel-body">
                    {% for i in range(10) %}
                        <ul class="media-list">
                            <li class="media">
                                <div class="media-right">
                                    <a href="#">
                                        <img class="media-object"
                                             src="/static/upload/userFaceImg/20190323_11270930ca91ef76c6a7ef6e9494def1faaf51f1de66f7.jpg"
                                             alt="..."

                                             style="width: 60px; height: 60px">
                                    </a>
                                </div>
                                <div class="media-body">

                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            westos评论xxxx电影于2019-10-12 23:00:00
                                        </div>
                                        <div class="panel-body">
                                            评论的内容
                                        </div>
                                    </div>

                            </li>
                        </ul>

                    {% endfor %}

                    <div class="col-md-12 text-center">
                        <nav aria-label="Page navigation">
                            <ul class="pagination">
                                <li>
                                    <a href="#" aria-label="First">
                                        <span aria-hidden="true">首页</span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" aria-label="Previous">
                                        <span aria-hidden="true">上一页</span>
                                    </a>
                                </li>
                                <li><a href="#">1&nbsp;/&nbsp;10</a></li>
                                <li>
                                    <a href="#" aria-label="Next">
                                        <span aria-hidden="true">下一页</span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" aria-label="Last">
                                        <span aria-hidden="true">尾页</span>
                                    </a>
                                </li>
                            </ul>
                        </nav>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}


在这里插入图片描述

6-9 个人登录日志的视图函数

@home.route('/userlog/')
@home.route('/userlog/<int:page>/')
def userlog(page=1):
    # 只能查看自己的登录日志
    userlogsPageObj = Userlog.query.filter_by(user_id=session.get('user_id')
                                    ).paginate(page, per_page=app.config['PER_PAGE'])

    return render_template('home/userlog.html',
                           userlogsPageObj=userlogsPageObj)

实现页面的userlog.html

{% extends 'home/base.html' %}

{% block title %}
    登录日志
{% endblock %}

{% block scripts %}
    {{ super() }}
    <script>
        $(document).ready(function () {
            $("#md-4").addClass('active');
        });
    </script>
{% endblock %}
{% block content %}
    {% include 'home/usermenu.html' %}
    <div class="col-lg-9">
        <div class="panel panel-warning">
            <div class="panel-heading">
                <h3 class="panel-title"><span class="glyphicon glyphicon-map-marker"></span>&nbsp;登录日志</h3>
            </div>
            <div class="panel-body">
                <table class="table table-hover">
                    <tr class="info">
                        <th>编号</th>
                        <th>登录时间</th>
                        <th>登录IP</th>

                    </tr>

                    {% for userlog in userlogsPageObj.items %}
                    <tr>
                        <td>{{ userlog.id }}</td>
                        <td>{{ userlog.addtime }}</td>
                        <td>{{ userlog.ip }}</td>
                    </tr>
                    {% endfor %}

                </table>
            </div>
        </div>
    </div>
{% endblock %}


在这里插入图片描述

6-10 个人电影收藏查看的视图函数

@home.route('/moviecollect/')
@home.route('/moviecollect/<int:page>/')
def moviecollect(page=1):
    # 只能查看自己的电影收藏
    moviecollectsPageObj = MovieCollect.query.filter_by(user_id = session.get('user_id')
                                 ).paginate(page, per_page=app.config['PER_PAGE'])
    return render_template('home/moviecollect.html',
                           moviecollectsPageObj=moviecollectsPageObj
                           )

实现页面的moviecollect.html

{% extends 'home/base.html' %}
{#
参考代码:
    bootstrap媒体对象: https://v3.bootcss.com/components/#panels
    bootstrap面板对象: https://v3.bootcss.com/components/#panels-heading

#}

{% block scripts %}
    {{ super() }}
    <script>
        $(document).ready(function () {
            $("#md-5").addClass('active');
        });
    </script>
{% endblock %}
{% block content %}
    <div class="container-fluid">
        {% include 'home/usermenu.html' %}
        <div class="col-lg-9">
            <div class="panel panel-warning">
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <span class="glyphicon glyphicon-map-marker"></span>&nbsp;收藏电影
                    </h3>
                </div>
                <div class="panel-body">

                    {% for i in range(10) %}
                        <div class="media" style="border: 1px solid lightgray; margin-top: 10px">
                            <div class="media-left">
                                <a href="#">
                                    <img class="media-object"
                                         src="/static/upload/userFaceImg/20190323_11270930ca91ef76c6a7ef6e9494def1faaf51f1de66f7.jpg"
                                         alt="..."
                                         style="width: 60px; height: 60px"
                                    >
                                </a>
                            </div>
                            <div class="media-body">
                                <h4 class="media-heading">电影名
                                    <a href="#" class="label label-primary pull-right">
                                        <span class="glyphicon glyphicon-play"></span>播放影片
                                    </a>
                                </h4>
                                该片主要讲述了人类为了抵抗怪兽的进攻,研制出了高大的机器战士与来犯怪兽进行对
                            </div>

                        </div>
                    {% endfor %}

                    <div class="col-md-12 text-center">
                        <nav aria-label="Page navigation">
                            <ul class="pagination">
                                <li>
                                    <a href="#" aria-label="First">
                                        <span aria-hidden="true">首页</span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" aria-label="Previous">
                                        <span aria-hidden="true">上一页</span>
                                    </a>
                                </li>
                                <li><a href="#">1&nbsp;/&nbsp;10</a></li>
                                <li>
                                    <a href="#" aria-label="Next">
                                        <span aria-hidden="true">下一页</span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" aria-label="Last">
                                        <span aria-hidden="true">尾页</span>
                                    </a>
                                </li>
                            </ul>
                        </nav>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}


在这里插入图片描述

7.播放页面的实现

视图函数

@home.route('/play/<int:id>/', methods=['GET', 'POST'])
@home.route('/play/<int:id>/<int:page>/', methods=['GET', 'POST'])
def play(id, page=1):
    movie = Movie.query.get_or_404(id)
    # if not movie.play_num:
    #     movie.play_num = 0
    # movie.play_num += 1
    count = Comment.query.filter_by(movie_id=id).count()
    form = CommentForm()
    if form.validate_on_submit():
        if session.get('user_id'):
            content = form.content.data
            comment = Comment(
                content=content,
                movie_id=id,
                user_id=session.get('user_id')

            )

            # if not movie.comment_num:
            #     movie.comment_num = Comment.query.filter_by(movie_id=id).count()
            #     movie.comment_num += 1
            db.session.add(comment)
            db.session.commit()
            flash("提交评论成功")
        else:
            flash("提交评论失败, 请先登录")
        return redirect(url_for('home.play', id=id))
    commentsPageObj=Comment.query.filter_by(movie_id=id).paginate(page, per_page=app.config['PER_PAGE'])
    return render_template('home/play.html',
                           app=app,
                           movie=movie,
                           count=count,
                           form=form,
                           commentsPageObj=commentsPageObj,
                           session=session)


# 添加电影收藏
@home.route('/moviecollect/addto/')
@is_login
def moviecollect_add():
    print('a')
    movie_id = request.args.get('movie_id', '')
    user_id = request.args.get('user_id', '')
    movie_collect = MovieCollect.query.filter_by(
        user_id=int(user_id),
        movie_id=int(movie_id)
    )
    # 如果用户已经收藏, 则返回OK=0;
    if movie_collect.count() == 1:
        data = dict(ok=0)
    # 如果用户未收藏, 则返回OK=1;
    elif movie_collect.count() == 0:
        movie_collect = MovieCollect(
            user_id=int(user_id),
            movie_id=int(movie_id)
        )
        db.session.add(movie_collect)
        db.session.commit()
        data = dict(ok=1)
    else:
        data = dict(ok='error')
    import json
    return json.dumps(data)

页面实现的html文件:play.html

{% extends 'home/base.html' %}
{% block title %}
    播放页面
{% endblock %}



{% block scripts %}
    {{ super() }}
    <!-- 配置文件 -->
    <script type="text/javascript" src="{{ url_for('static', filename='asset/ueditor/ueditor.config.js') }}"></script>
    <!-- 编辑器源码文件 -->
    <script type="text/javascript" src="{{ url_for('static', filename='asset/ueditor/ueditor.all.js') }}"></script>
    <script type="text/javascript" src="{{ url_for('static', filename='asset/ueditor/lang/zh-cn/zh-cn.js') }}"></script>

    <!-- 实例化编辑器 -->
    <script>
        var ue = UE.getEditor('input_content',
            {
                toolbars: [
                    ['fullscreen', 'source', 'undo', 'redo', 'bold']
                ],
                autoHeightEnabled: true,
                autoWidthEnabled: true,
                autoFloatEnabled: true
            });

            $("#btn-col").click(function () {
                var movie_id ={{ movie.id }};
                var user_id ={{ session.get('user_id ')}};
                $.ajax({
                    url: "{{ url_for('home.moviecollect_add') }}",

                    type: "GET",
                    data: "movie_id=" + movie_id + "&user_id=" + user_id,
                    dataType: "json",
                    success: function (res) {
                        if (res.ok === 1) {
                            alert("收藏成功!");

                        } else {
                            alert("已经收藏!");
                            {#type: 'GET',#}
                        {#data: 'movie_id=' + movie_id + '&user_id=' + user_id,#}
                        {#dataType: 'json',#}
                        {#success: function (res) {#}
                        {#    if (res.ok === 1) {#}
                        {#        alert("收藏成功!");#}
                        {#$('#show_collect_msg').empty();#}
                        {##}
                        {#$('#show_collect_msg').append('收藏成功');#}
                        {#    } else {#}
                        {#        alert("已经收藏!");#}
                        {#$("#show_collect_msg").empty();#}
                        {#$("#show_collect_msg").append("已经收藏!");#}
                    }

                }
            })

        });

    </script>
    <!--播放页面-->
{% endblock %}
{% block content %}
    <div class="container-fluid">
    {#   电影播放部分       #}
    <div class="col-md-6" style="margin-left: 50px">
        <video src="{{ url_for('static',filename=app.config['MOVIE_UP_DIR_LAST'] + movie.url) }}" controls="controls">
            您的浏览器不支持 video 标签。
        </video>
    </div>
    {#  右侧电影信息页面       #}
    <div class="col-md-4" style="height:500px;">
        <div class="panel panel-info">
            <div class="panel-heading">
                <h3 class="panel-title"><span class="glyphicon glyphicon-facetime-video"></span>&nbsp;电影介绍</h3>
            </div>
            <div class="panel-body" style="height:459px;">
                <table class="table">
                    <tr>
                        <td style="width:30%;color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-film"></span>&nbsp;片名
                        </td>
                        <td>{{ movie.name }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-tag"></span>&nbsp;标签
                        </td>
                        <td>{{ movie.tag.name }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-time"></span>&nbsp;片长
                        </td>
                        <td>{{ movie.length }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-map-marker"></span>&nbsp;地区
                        </td>
                        <td>{{ movie.area }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-star"></span>&nbsp;星级
                        </td>
                        <td>
                            <div>
                                {% for i in range(movie.star) %}
                                    <span class="glyphicon glyphicon-star" style="color:#FFD119"></span>
                                {% endfor %}

                                {% for j in range(5-movie.star) %}
                                    <span class="glyphicon glyphicon-star-empty" style="color:#FFD119"></span>
                                {% endfor %}
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-calendar"></span>&nbsp;上映时间
                        </td>
                        <td>{{ movie.release_time }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-play"></span>&nbsp;播放数量
                        </td>
                        <td>{{ movie.play_num }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-comment"></span>&nbsp;评论数量
                        </td>
                        <td>{{ movie.comment_num }}</td>
                    </tr>
                    <tr>
                        <td style="color:#ccc;font-weight:bold;font-style:italic;">
                            <span class="glyphicon glyphicon-picture"></span>&nbsp;影片介绍
                        </td>
                        <td>
                            {{ movie.info }}
                        </td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    {#  电影评论信息       #}
    <div class="col-md-12" style="margin-top:6px;">
    <div class="panel panel-danger">
    <div class="panel-heading">
        <h3 class="panel-title"><span class="glyphicon glyphicon-comment"></span>&nbsp;电影评论</h3>
    </div>
    <div class="panel-body">
        {% if not session.get('user_id') %}
            <div class="alert alert-danger alert-dismissible" role="alert">
                <button type="button" class="close" data-dismiss="alert">
                    <span aria-hidden="true">×</span>
                    <span class="sr-only">Close</span>
                </button>
                <strong>请先<a href="{{ url_for('home.login') }}"
                             target="_blank" class="text-info">
                    登录</a>,才可参与评论!</strong>
            </div>
        {% endif %}
        <ol class="breadcrumb" style="margin-top:6px;">
            <li>全部评论({{ count }})</li>
        </ol>
        <form role="form" style="margin-bottom:6px;" method="post">
            <div class="form-group">
                <div>
                    {{ form.csrf_token }}
                    <label for="input_content">{{ form.content.label }}</label>
                    {#                    <textarea id="input_content">{{ form.content }}</textarea>#}
                    {{ form.content }}
                </div>
                <div class="col-xs-12" id="error_content"></div>
            </div>
            {{ form.submit }}
            {#            <a class="btn btn-success pull pull-right" id="btn-sub"><span class="glyphicon glyphicon-edit"></span>&nbsp;提交评论</a>#}
            &nbsp;{% if session.get('user_id') %}
            <a class="btn btn-danger pull pull-left" id="btn-col">
                <span class="glyphicon glyphicon-heart"></span>&nbsp;收藏电影</a>
            {#            <span id="show_collect_msg"></span>#}
        {% endif %}
        </form>
        <div class="col-md-12">
            <div class="panel panel-info" style="margin-top: 50px">
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <span class="glyphicon glyphicon-map-marker"></span>
                        &nbsp;评论记录</h3>
                </div>
                <div class="panel-body">

                    <ul class="media-list">
                        {% for comment in commentsPageObj.items %}
                            <li class="media">
                                <div class="media-right">
                                    {% if comment.user.face %}
                                        <a href="#">
                                            <img class="media-object"
                                                 src="{{ url_for('static',filename=app.config('FC_DIR_LAST')+comment.user.face) }}"
                                                 alt="..."

                                                 style="width: 60px; height: 60px">
                                        </a>
                                    {% else %}
                                        <a href="#">
                                            <img class="media-object"
                                                 src="https://dummyimage.com/50x50/0000/fffff&text={{ session.get('user') }}"
                                                 alt="..."

                                                 style="width: 60px; height: 60px">
                                        </a>
                                    {% endif %}
                                </div>
                                <div class="media-body">

                                    <div class="panel panel-default">
                                        <div class="panel-heading">
                                            {{ comment.user.name }}评论{{ comment.movie.name }}电影于{{ comment.addtime }}
                                        </div>
                                        <div class="panel-body">
                                            {{ comment.content | safe }}
                                        </div>
                                    </div>

                                </div>
                            </li>
                        {% endfor %}
                    </ul>
                </div>

                {% if commentsPageObj.pages > 0 %}
                    <div class="col-md-12 text-center">
                        <nav aria-label="Page navigation">
                            <ul class="pagination">
                                <li>
                                    <a href="{{ url_for('home.play', id=movie.id,  page=1) }}" aria-label="First">
                                        <span aria-hidden="true">首页</span>
                                    </a>
                                </li>
                                {% if commentsPageObj.has_prev %}
                                    <li>
                                        <a href="{{ url_for('home.play', id=movie.id,  page=commentsPageObj.prev_num) }}"
                                           aria-label="Previous">
                                            <span aria-hidden="true">上一页</span>
                                        </a>
                                    </li>
                                {% else %}
                                    <li class="disabled">
                                        <a aria-label="Previous">
                                            <span aria-hidden="true">上一页</span>
                                        </a>
                                    </li>
                                {% endif %}
                                <li><a href="#">{{ commentsPageObj.page }}&nbsp;/&nbsp;{{ commentsPageObj.pages }}</a>
                                </li>
                                {% if commentsPageObj.has_next %}
                                    <li>
                                        <a href="{{ url_for('home.play', id=movie.id,  page=commentsPageObj.next_num) }}"
                                           aria-label="Next">
                                            <span aria-hidden="true">下一页</span>
                                        </a>
                                    </li>
                                {% else %}
                                    <li class="disabled">
                                        <a aria-label="Next">
                                            <span aria-hidden="true">下一页</span>
                                        </a>
                                    </li>
                                {% endif %}
                                <li>
                                    <a href="{{ url_for('home.play', id=movie.id,  page=commentsPageObj.pages) }}"
                                       aria-label="Last">
                                        <span aria-hidden="true">尾页</span>
                                    </a>
                                </li>
                            </ul>
                        </nav>
                    </div>
                {% endif %}
            </div>
        </div>
    </div>


{% endblock %}
</div></div></div>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GLH_2236504154/article/details/88899564