• Flask框架登录日志模块编写


    web扫描器网站的框架搭建逐渐进入尾声,边搭建框架的时候负责前端的小姐姐也在完善页面设计,过两天就可以进行功能点的完善了。

    在扫描器中我们用到了用户登录模块,想法是初始化一个账户和密码,比如说admin : 123456这种,用户第一次登陆之后修改密码即可,需要使用扫描器的话自己在服务器上搭建即可,或者是多人使用同一个账号,避免有人利用注册模块白嫖扫描器,当然也可以添加邀请码注册的功能,不过暂时没有这个想法。

    作为web管理员登录之后,应该有一个模块是查看登录日志,可以看是否有尝试暴力破解登录的情况出现,这篇博文的目的也是使用Flask框架编写登录日志模块

    登录的日志模型暂定为:ip,email,password,date 四个数据,分别用来储存登录者的IP地址,登录邮箱,密码,和登录时间,管理员也可以通过查看日志快速发现网站的异常情况

    首先在 models.py里面创建log日志类

    class Log(db.Model):
        __tablename__='log'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        ip=db.Column(db.String(20),nullable=False)
        email=db.Column(db.String(50),nullable=False)
        password=db.Column(db.String(100),nullable=False)
        date=db.Column(db.DateTime,default=datetime.now)
    

      date使用default=datetime.now获取用户登录的时间,需要导入包

    from datetime import datetime
    

      接着在index.py里面编写save_log函数

    def save_log(ip,email,password):
        log = Log(ip=ip,email=email, password=password)
        db.session.add(log)
        db.session.commit()
    

      我们只需要传入ip,email,和password即可,因为我这里是使用邮箱登录,如果你是使用用户名的话需要将email修改为username,当然在models里面也要修改

    接着我们在用户登录的地方放入save_log函数就可以了,在其登录的时候将参数传给save_log函数

    另外还有如何取到用户IP的问题,使用request里面的方法:

    ip = request.remote_addr
    

      调用save_log函数在login函数里

    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        else:
            email=request.form.get('email')
            password=request.form.get('password')
            remeber=request.form.get('remeber')
            save_log(request.remote_addr,email,password)
            user=User.query.filter(User.email==email,User.password==password).first()
            if user:
                if remeber:
                    session.permanent = True
                session['user_id']=user.id
                return redirect(url_for('index'))
            else:
                return "邮箱或密码错误,请确认后重新登录"
    

      调用处是:

    save_log(request.remote_addr,email,password)
    

      这样用户在login页面登录的时候,服务器就能将相关的日志信息储存在数据库里面

    接着我们将models映射到数据库里面去

    因为我这里初始化过了,使用:

    python3 manage.py db migrate
    

      

    python3 manage.py db upgrade
    

      两条命令映射并更新到数据库中,如果没有初始化的话需要先执行这条:

    python3 manage.py db init
    

      执行结束后数据库里面就出现了log表

     我们使用错误账号密码,登录之后查看在数据库里面是否储存了相关信息

     多次登录之后,再查看数据库,可以看到已经储存了相关信息,完成日志模块的编写。

    另外还需要完善的就是从数据库里面提取出日志信息在页面上显示,以及将password在数据库中加盐储存,而不是明文模式储存

  • 相关阅读:
    洛谷 P1650 田忌赛马(dp)
    卡常技巧(持续更新)
    CF106C Buns(多重背包 单调队列优化)
    洛谷 P1385 密令(dp,离线)
    CF245H Queries for Number of Palindromes(dp,二维前缀和)
    CF1061C Multiplicity(dp)
    对拍技巧
    牛客练习赛89 解题报告(ABCDF)
    洛谷 P1018 [NOIP2000 提高组] 乘积最大(dp,高精度)
    洛谷 P5629 【AFOI-19】区间与除法(ST表)
  • 原文地址:https://www.cnblogs.com/Cl0ud/p/12613317.html
Copyright © 2020-2023  润新知