class OperationLog(db.Model): """操作日志表""" __bind_key__ = 'db2' __tablename__ = 'operation_log' id = mapped_column(Integer, primary_key=True) userid = mapped_column(String(16)) username = mapped_column(String(32), index=True) endpoint = mapped_column(String(128)) methods = mapped_column(String(16)) full_path = mapped_column(String(256)) c_date = mapped_column(DateTime) @staticmethod def add_operation_log(userid: str, username: str): """新增操作日志""" c_date = datetime.now() operation_log = OperationLog() operation_log.userid = userid operation_log.username = username operation_log.endpoint = request.endpoint operation_log.methods = request.method operation_log.full_path = request.full_path operation_log.c_date = c_date db.session.add(operation_log) db.session.execute( update(User).where(User.userid == userid).values(lastlogin=c_date)) db.session.commit() return True 帮我优化并建议这段代码
时间: 2024-01-18 08:01:56 浏览: 101
以下是对代码的优化和建议:
1. 使用类方法代替静态方法
在这种情况下,我们可以使用类方法代替静态方法。这样,我们可以从类本身传递参数而不是从实例传递参数,并且可以轻松地访问类属性。
2. 使用参数注释
为了更好地理解代码,我们建议使用参数注释,以便将参数名称,类型和说明文档化。
3. 使用类型提示
在函数参数和返回值中使用类型提示可以提高代码的可读性和可维护性,并帮助 IDE 提供更好的代码补全和错误检查。
4. 使用 try-finally 块
使用 try-finally 块可以确保无论是否出现异常,都会关闭数据库会话。
5. 使用 with 语句
使用 with 语句可以确保数据库会话在使用后被关闭,而无需显式调用 commit 或 rollback 方法。
以下是优化后的代码:
```
class OperationLog(db.Model):
"""操作日志表"""
__bind_key__ = 'db2'
__tablename__ = 'operation_log'
id = mapped_column(Integer, primary_key=True)
userid = mapped_column(String(16))
username = mapped_column(String(32), index=True)
endpoint = mapped_column(String(128))
methods = mapped_column(String(16))
full_path = mapped_column(String(256))
c_date = mapped_column(DateTime)
@classmethod
def add_operation_log(cls, userid: str, username: str) -> bool:
"""新增操作日志"""
c_date = datetime.now()
operation_log = cls()
operation_log.userid = userid
operation_log.username = username
operation_log.endpoint = request.endpoint
operation_log.methods = request.method
operation_log.full_path = request.full_path
operation_log.c_date = c_date
with db.session.begin():
db.session.add(operation_log)
db.session.execute(
update(User).where(User.userid == userid).values(lastlogin=c_date))
return True
```
阅读全文