我有下一个代码:
class UserMethods():
@style.queue
def checkAuth(db, user, password):
self.addUser(db, user, password)
@style.queue
def addUser(db, user, password):
salt = reduce(lambda x, y: x + y, [str(random.randint(0, 9)) for i in range(0, 5)])
h = sha1(salt + password)
password = salt + h.hexdigest()
c = db.c
c.execute('SELECT name FROM users WHERE name=?', (user, ))
if c.fetchone() is not None:
c.execute('UPDATE users SET password=? WHERE name=?', (password, user))
else:
c.execute('INSERT INTO users (name, password) VALUES (?, ?)', (user, password))
我不知道@ style.queue的目的是什么,但我认为这不相关。
但是self.addUser(db, user, password)
的部分对我不起作用。如何在 checkAuth 中调用 addUser ?
错误是:
NameError:全局名称' addUser'没有定义 数据库错误@ checkAuth(' lroca',' asgard * 123 +'){}全球名称' addUser'未定义
答案 0 :(得分:2)
Cameron和Wooble的评论是正确的。要解决当前问题,请添加self
作为实例方法的第一个参数。这是更新的代码:
class UserMethods():
@style.queue
def checkAuth(self, db, user, password):
self.addUser(db, user, password)
@style.queue
def addUser(self, db, user, password):
salt = reduce(lambda x, y: x + y, [str(random.randint(0, 9)) for i in range(0, 5)])
h = sha1(salt + password)
password = salt + h.hexdigest()
c = db.c
c.execute('SELECT name FROM users WHERE name=?', (user, ))
if c.fetchone() is not None:
c.execute('UPDATE users SET password=? WHERE name=?', (password, user))
else:
c.execute('INSERT INTO users (name, password) VALUES (?, ?)', (user, password))
作为旁注:看来此程序可能接受user
和password
的任意输入,因此可能容易受到SQL injection的攻击。</ p>