0

私はトルネード フレームワークを使用しており、関数はすべて同期的に記述されています。これらを非同期にするにはどうすればよいですか?

class AuthLoginHandler(BaseHandler):
    @tornado.web.asynchronous
    def get(self):

        self.render("login.html")

    def post(self):
        username = self.get_argument("UserName",strip = True)
        password = self.get_argument("Password",strip = True)
        user = auth_actions.login(username,password)
        if not user:
            self.redirect("/auth/login")
            return

        #user = user_actions.get_my_data(self.db,user['_id'])

        self.set_secure_cookie("userdata", tornado.escape.json_encode(dumps(user.to_mongo())))
        self.redirect("/")


def login(username,password,callback=None):
    m = hashlib.md5()
    m.update(password)
    hashed = m.hexdigest()
    login = User.objects(UserName=username.lower(),Password=hashed).exclude("Password","Wall","FriendsRequested","Friends","FriendsRequesting")
    if login.first() is None:
        login = User.objects(Email=username.lower(),Password=hashed).exclude("Password","Wall","FriendsRequested","Friends","FriendsRequesting")
        if login.first() is None:
            return None
    logger.info(username + " has logged in")
    if callback != None:
        return callback(login.first())

    return login.first()
4

2 に答える 2

1

パスワードをハッシュする場合は、別のスレッドで行うのが最善です。これは、ハッシュの実行に時間がかかり、メイン スレッドがブロックされるためです。

別のスレッドでのハッシュの例を次に示します

Tornado のメンテナーである Ben Darnell は、別のスレッドを使用してパスワード ハッシュを行うことを推奨しています。この google group を参照してください

于 2013-04-12T13:58:35.833 に答える