自定义信号


1、app.py

from flask import Flask, render_template, request, g
from utils import login_success
from blinker import Namespace
from datetime import datetime

app = Flask(__name__)

# 创建信号
login = Namespace()
login_signal = login.signal('login')

def login_func(sender):
    login_time = datetime.now()
    login_ip = request.remote_addr
    login_log = f'用户名:{g.username} 登录时间:{login_time} 登录IP:{login_ip}\n'
    with open('login_log.txt', 'a', encoding='utf-8') as login_file:
        login_file.write(login_log)

# 监听信号
login_signal.connect(login_func)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('index.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'admin' and password == '123456':
            g.username = username
            # 发送信号
            login_signal.send()
            return login_success()
        else:
            return '用户名或密码错误'

if __name__ == '__main__':
    app.run()

2、utils.py

from flask import g

def login_success():
    return f'{g.username} 登录成功'

3、index.html

<form action="" method="post" enctype="multipart/form-data">
  <table>
    <tbody>
    <tr>
      <td>用户名:</td>
      <td><input type="text" name="username"></td>
    </tr>
    <tr>
      <td>密码:</td>
      <td><input type="password" name="password"></td>
    </tr>
    <tr>
      <td></td>
      <td><input type="submit" value="立即登录"></td>
    </tr>
    </tbody>
  </table>
</form>

4、login_log.txt

用户名:admin 登录时间:2022-03-16 00:11:46.243264 登录IP:127.0.0.1
用户名:admin 登录时间:2022-03-16 00:11:47.315820 登录IP:127.0.0.1
用户名:admin 登录时间:2022-03-16 00:12:48.757076 登录IP:127.0.0.1

results matching ""

    No results matching ""