String s = vars.get("resultsArray0_initLoadPage_Submit_C_1"); log.info("1===============:"+s); 报错 Undefined argument: s
时间: 2023-09-06 14:11:59 浏览: 47
这个错误可能是因为 `vars.get()` 方法返回了 null 值,导致后面的 `s` 变量没有被正确初始化。你可以在调用 `vars.get()` 方法之前,先检查一下它返回的值是否为 null:
```
String s = vars.get("resultsArray0_initLoadPage_Submit_C_1");
if (s != null) {
log.info("1===============:" + s);
} else {
log.warn("vars.get() 方法返回了 null");
}
```
这样即使 `vars.get()` 方法返回了 null 值,也不会导致后面的代码出错了。
相关问题
String bankNo = (String)acc_info.get(0).get("bank_no")
这段代码有问题。假设 `acc_info` 是一个包含了多个 Map 的 ArrayList,每个 Map 都是一个银行账户的信息,那么这个代码想要获取第一个 Map 中键为 "bank_no" 的元素的值。但是,这个代码有两个问题:
1. `acc_info.get(0)` 返回的是第一个 Map,而不是一个 ArrayList,所以不能再调用 `get` 方法。
2. HashMap 的 `get` 方法需要传入一个键值,而不是一个整数索引值。
如果想要实现这个功能,可以修改代码如下:
```
ArrayList<HashMap<String, String>> acc_info = new ArrayList<>();
HashMap<String, String> map = new HashMap<>();
map.put("bank_no", "1234567890");
acc_info.add(map);
String bankNo = acc_info.get(0).get("bank_no");
```
这样就可以正确地获取第一个 Map 中键为 "bank_no" 的元素的值了。注意,如果 `acc_info` 中不包含任何元素,或者第一个 Map 中不包含 "bank_no" 这个键,那么这段代码可能会返回 null。
class UserSigninLog(db.Model): """登录日志表""" bind_key = 'db2' tablename = 'user_signin_log' id = mapped_column(Integer, primary_key=True) userid = mapped_column(String(16), index=True) username = mapped_column(String(32)) ip_addr = mapped_column(String(32)) request_user_agent = mapped_column(String(256)) c_date = mapped_column(DateTime) @staticmethod def add_user_signin_log(userid: str, username: str): """新增登录日志""" user_signin_log = UserSigninLog() user_signin_log.userid = userid user_signin_log.username = username user_signin_log.ip_addr = request.access_route[0] user_signin_log.request_user_agent = request.headers.get("User-Agent") user_signin_log.c_date = datetime.now() db.session.add(user_signin_log) db.session.commit() return True @staticmethod def check_ip_and_header_within_x_days(userid: str, days=7): """检查x天内登录过的ip地址和请求头""" sql_query = select(UserSigninLog) \ .where(UserSigninLog.userid == userid, UserSigninLog.ip_addr == request.access_route[0], UserSigninLog.request_user_agent == request.headers.get("User-Agent"), UserSigninLog.c_date >= datetime.now() - timedelta(days=days)).limit(1) user_ip_addr_log = db.session.execute(sql_query).scalar_one_or_none() if user_ip_addr_log: return True return False 请帮我建议并优化这段代码,python3.8
以下是我对这段代码的建议和优化:
1. 使用 Flask 的上下文对象获取 request 对象,避免在静态方法中使用全局变量
```python
from flask import request
class UserSigninLog(db.Model):
# ...
@staticmethod
def add_user_signin_log(userid: str, username: str):
"""新增登录日志"""
user_signin_log = UserSigninLog()
user_signin_log.userid = userid
user_signin_log.username = username
user_signin_log.ip_addr = request.access_route[0]
user_signin_log.request_user_agent = request.headers.get("User-Agent")
user_signin_log.c_date = datetime.now()
db.session.add(user_signin_log)
db.session.commit()
return True
@staticmethod
def check_ip_and_header_within_x_days(userid: str, days=7):
"""检查x天内登录过的ip地址和请求头"""
user_agent = request.headers.get("User-Agent")
ip_addr = request.access_route[0]
c_date = datetime.now() - timedelta(days=days)
user_ip_addr_log = UserSigninLog.query.filter_by(userid=userid, ip_addr=ip_addr, request_user_agent=user_agent).filter(UserSigninLog.c_date >= c_date).first()
if user_ip_addr_log:
return True
return False
```
2. 使用 SQLAlchemy 的 ORM 语法查询,避免手写 SQL 语句
```python
from sqlalchemy import and_
class UserSigninLog(db.Model):
# ...
@staticmethod
def check_ip_and_header_within_x_days(userid: str, days=7):
"""检查x天内登录过的ip地址和请求头"""
user_agent = request.headers.get("User-Agent")
ip_addr = request.access_route[0]
c_date = datetime.now() - timedelta(days=days)
user_ip_addr_log = UserSigninLog.query.filter(and_(UserSigninLog.userid == userid, UserSigninLog.ip_addr == ip_addr, UserSigninLog.request_user_agent == user_agent, UserSigninLog.c_date >= c_date)).first()
if user_ip_addr_log:
return True
return False
```
3. 让静态方法更加灵活,接收 request 对象作为参数
```python
class UserSigninLog(db.Model):
# ...
@staticmethod
def add_user_signin_log(userid: str, username: str, request):
"""新增登录日志"""
user_signin_log = UserSigninLog()
user_signin_log.userid = userid
user_signin_log.username = username
user_signin_log.ip_addr = request.access_route[0]
user_signin_log.request_user_agent = request.headers.get("User-Agent")
user_signin_log.c_date = datetime.now()
db.session.add(user_signin_log)
db.session.commit()
return True
@staticmethod
def check_ip_and_header_within_x_days(userid: str, request, days=7):
"""检查x天内登录过的ip地址和请求头"""
user_agent = request.headers.get("User-Agent")
ip_addr = request.access_route[0]
c_date = datetime.now() - timedelta(days=days)
user_ip_addr_log = UserSigninLog.query.filter(and_(UserSigninLog.userid == userid, UserSigninLog.ip_addr == ip_addr, UserSigninLog.request_user_agent == user_agent, UserSigninLog.c_date >= c_date)).first()
if user_ip_addr_log:
return True
return False
```
这些是我对这段代码的建议和优化,希望能对你有所帮助。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)