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在数据库中加盐储存,而不是明文模式储存

posted @ 2020-04-01 16:10  春告鳥  阅读(758)  评论(0编辑  收藏  举报