我正在尝试使用web.py创建一个登录脚本,但我似乎无法弄清楚它!
我正在使用MySQLdb作为数据库引擎。
以下是我采用的两种方法,但似乎都没有起作用。如果有人可以帮助我,我将非常感激。
方法1
class login():
def GET(self):
return render.login()
def POST(self):
i = web.input()
d = i.username
email = db.select('users', where='email')
if d == email:
return"Success!"
else:
return"Nahh"
方法2
class login():
def GET(self):
return render.login()
def POST(self):
i = web.input()
u = i.username
p = i.password
d = db.query("SELECT * FROM users WHERE username=i.username AND password=i.password")
g = db.num_rows(d)
if g == 1:
return "Success!"
if g != 1:
return "Fail!"
我做错了什么?我仍然是Web.py的新手,我知道第一个例子并没有真正意义......但如果这是有道理的话,它只是一个理论。
答案 0 :(得分:0)
答案 1 :(得分:0)
我只是想加入,因为上面发布的演示代码有潜在的SQL注入问题。我知道它已经有一段时间了,你现在可能已经解决了这些问题。
我的代码与您的第二种方法非常相似:
class Login(object):
def GET(self):
return render_template('login/login.html')
def POST(self):
data = web.input()
try:
username = data.username
# All passwords are stored hashed!
password = hashlib.sha224(data.password).hexdigest()
result = db.select("users",
vars = dict(username=username, password=password),
what = 'id',
where = "username=$username and password=$password")
if len(result) != 0:
web.ctx.session.userid = result[0].id
web.ctx.user = UserModel(result[0].id)
return web.seeother('/')
except Exception, e:
return render_template('login/login.html',errors=["Bad user/pass"])
在制作中我实际上在我的vars dict中有更多的键,比如is_active。我也记录任何异常。我使用Jinja作为模板引擎,这就是为什么我的回答与你的反应有点不同。