2011-11-19 2 views
1

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" 

방법 내가 뭘 잘못이

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

MySQLdb를 직접 사용 하시겠습니까? 아니면 web.py의 web.db 래퍼를 사용합니까?

webpy의 래퍼를 사용하는 경우 db.selectdb.query에 대한 설명서를 읽어야합니다.

+0

실제로이 부분을 알아 냈습니다. 내 문제는 이제 입력이 num_rows 문으로 데이터베이스에 있는지 확인하는 것입니다. MySQLdb에 뭔가가 있다고 생각합니다 countrows 나 맞아. – Max00355

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"]) 

는 사실 is_active처럼, 내 바르의 딕셔너리에 몇 가지 더 키가. 나는 또한 어떤 예외도 기록한다. Jinja를 템플릿 엔진으로 사용하고 있습니다. 따라서 내 응답이 귀하와 약간 다릅니다.

관련 문제