为了账号安全,请及时绑定邮箱和手机立即绑定

14 -Flask构建弹幕微电影网站-后台逻辑(六)

2018.07.21 23:47 207浏览

本章内容: 日志管理实现
已上线演示地址: http://movie.mtianyan.cn
项目源码地址:https://github.com/mtianyan/movie_project

  1. 模型: Oplog Userlog Adminlog

  2. 表单: 无

  3. 请求方法: GET

  4. 访问控制: @admin_login_req

引入上下文应用处理器的概念。封装全局变量把全局变量展现到模板里面

@admin.context_processordef tpl_extra():
    """
    上下应用处理器
    """
    data = dict(
        online_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    )    return data

如何将online_time体现在模板中

mark

mark

将增删改查的记录记录下来

session["admin_id"] = admin.id
session.pop("admin_id", None)

登录进来将id保存到session。退出时清除。

在tag_add中添加

        oplog = Oplog(
            admin_id=session["admin_id"],
            ip=request.remote_addr,
            reason="添加标签%s" % data["name"]
        )
        db.session.add(oplog)
        db.session.commit()

flask中获取ip地址使用request.remote_addr

上一节中的g只活在当前请求的上下文,岂不是每个都得添加。所以在上下文应用处理器中添加字段: logo,但是全局上下文就包括了那些没有session['admin']存在的页面,如登录页面所以加上try捕获。

mark

mark

实现操作日志列表

@admin.route("/oplog/list/<int:page>/", methods=["GET"])@admin_login_reqdef oplog_list(page=None):
    """
    操作日志管理
    """
    if page is None:
        page = 1
    page_data = Oplog.query.join(
        Admin
    ).filter(
        Admin.id == Oplog.admin_id,
    ).order_by(
        Oplog.addtime.desc()
    ).paginate(page=page, per_page=1)    return render_template("admin/oplog_list.html", page_data=page_data)

设置了列表的处理view。前往grid中为跳转的url添加page字段。

mark

mark

使用pagedata填充页面字段值。

mark

mark

然后import pg 并调用page方法进行分页操作

mark

mark

mark

mark

管理员登录日志

在登录的view视图时存入数据

        adminlog = Adminlog(
            admin_id=admin.id,
            ip=request.remote_addr,
        )
        db.session.add(adminlog)
        db.session.commit()

查看列表

@admin.route("/adminloginlog/list/<int:page>/", methods=["GET"])@admin_login_reqdef adminloginlog_list(page=None):
    if page is None:
        page = 1
    page_data = Adminlog.query.join(
        Admin
    ).filter(
        Admin.id == Adminlog.admin_id,
    ).order_by(
        Adminlog.addtime.desc()
    ).paginate(page=page, per_page=1)    return render_template("admin/adminloginlog_list.html", page_data=page_data)

将page_data填充到模板中,import pg 然后调用page方法。

mark

mark

mark

mark

前往grid中添加跳转过来的url

mark

mark

会员登录日志列表

添加测试数据

insert into userlog(user_id,ip,addtime) values(1,"192.168.4.1",now());insert into userlog(user_id,ip,addtime) values(2,"192.168.4.2",now());insert into userlog(user_id,ip,addtime) values(3,"192.168.4.3",now());insert into userlog(user_id,ip,addtime) values(4,"192.168.4.4",now());insert into userlog(user_id,ip,addtime) values(5,"192.168.4.5",now());insert into userlog(user_id,ip,addtime) values(6,"192.168.4.6",now());insert into userlog(user_id,ip,addtime) values(7,"192.168.4.7",now());insert into userlog(user_id,ip,addtime) values(8,"192.168.4.8",now());

views.py中

@admin.route("/userloginlog/list/<int:page>/", methods=["GET"])@admin_login_reqdef userloginlog_list(page=None):
    """
    会员登录日志列表
    """
    if page is None:
        page = 1
    page_data = Userlog.query.join(
        User
    ).filter(
        User.id == Userlog.user_id,
    ).order_by(
        Userlog.addtime.desc()
    ).paginate(page=page, per_page=2)    return render_template("admin/userloginlog_list.html", page_data=page_data)

然后先使用pagedata填充数据,再使用import pg 以及page方法进行分页

mark

mark

mark

mark

mark

mark

gird中为跳转到日志管理的url添加page参数

第七章结束,撒花庆祝。




点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

相关文章推荐

正在加载中
意见反馈 去赚学费 帮助中心 APP下载
官方微信

举报

0/150
提交
取消