尝试使用web.py创建登录脚本

时间:2011-11-19 02:13:37

标签: python mysql web.py

我正在尝试使用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的新手,我知道第一个例子并没有真正意义......但如果这是有道理的话,它只是一个理论。

2 个答案:

答案 0 :(得分:0)

您是直接使用MySQLdb还是通过web.py的web.db包装器?

如果你使用webpy的包装器,那么你应该阅读db.selectdb.query上的手册。

答案 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作为模板引擎,这就是为什么我的回答与你的反应有点不同。