LoginHandler

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Filename      : login.py
# https://github.com/lujinda/pylot/blob/63577a249a66b18ec706a170cf668025c4b8b4d7/hao7you_admin/handler/login.py
from .public import ApiHandler
from db.account import create_default_account, check_account, lock_account
from util.error import Error
from util.enc import enc_password
from util.util import made_uuid
from util.email import send_email


class LoginHandler(ApiHandler):
    def get(self):
        create_default_account()
        self.render('login.html')

    def post(self):
        username = self.get_body_argument('username')
        password = enc_password(self.get_body_argument('password'))
        return_url = self.get_query_argument('return_url', '/')
        error = check_account(username, password)

        if error == Error.USER_NOT_EXIST:
            self.set_error('用户名和密码不匹配')
            return

        if error == Error.AUTH_FAILE:
            self.incr_login_counter(username)
            self.set_error('用户名和密码不匹配')
            return

        if error == Error.USER_LOCKED:
            self.set_error('用户已被锁定,请留意管理员邮箱内激活短信')
            return

        self.session['user'] = username
        self.session.save()

        self.set_result('return_url', return_url)
        self.clear_login_counter(username)

    def clear_login_counter(self, username):
        self.redis_db.delete(self.__counter_key(username))

    def __counter_key(self, username):
        return 'login:counter:' + username

    def incr_login_counter(self, username):
        counter = self.redis_db.incr(self.__counter_key(username))
        if counter == 3:  # 如果错误到了3次,则锁定用户名, 并发送激活邮箱到管理员账号
            lock_account(username)
            self.send_active_email(username)

    def send_active_email(self, username):
        token = made_uuid()
        self.redis_db.set('account:active:%s' % (username,),
                          token)
        active_url = self.full_host + '/active?username={username}&token={token}'.format(username=username, token=token)
        send_email('q8886888@qq.com', subject="请激活您被锁定的账号",
                   html="<a href='{url}' target='_blank'>{url}</a>".format(url=active_url))


from .public import BaseHandler


class LogoutHandler(BaseHandler):
    def get(self):
        self.session.logout()
        self.redirect(self.get_login_url())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个请求是通过注册一个登录处理器来获取的。具体来说,当客户端发送一个/login请求时,服务器会调用名为LoginHandler的处理器来处理该请求。在Java代码中,可以通过创建一个名为builder的对象,并使用registerHandler()方法将LoginHandler类注册为/login请求的处理器来实现这一功能。 ### 回答2: 要获取这个请求,可以通过以下步骤: 首先,创建一个`Builder`对象,通过`builder.registerHandler("/login",new LoginHandler())`来注册一个路径为`/login`的请求处理器`LoginHandler`。这个路径和处理器的关联告诉服务器,在客户端请求时,如果路径匹配了`/login`,那么就会调用`LoginHandler`来处理该请求。 其次,当有客户端发送一个请求时,服务器会解析这个请求的相关信息,如请求的路径、请求的方法等。假设客户端发送的请求路径为`/login`,服务器会根据注册的路径和处理器的映射关系去查找匹配的处理器。 然后,如果请求路径`/login`与注册的`/login`路径匹配,服务器就会调用`LoginHandler`来处理该请求。这个处理器可以定义具体的处理逻辑,可以是验证用户身份、处理登录逻辑等。在`LoginHandler`的处理过程中,可以获取请求的相关数据,如请求参数、请求头等,并根据具体的需求进行处理。 最后,处理器完成请求处理后,可以返回相应的结果给客户端,并根据需要进行一些后续的操作。客户端收到响应后,可以根据返回的结果做相应的处理。 综上所述,通过`builder.registerHandler("/login",new LoginHandler())`的注册方式,可以将路径为`/login`的请求与`LoginHandler`处理器关联起来,从而在有相关请求时获取并处理该请求。 ### 回答3: 在使用builder.registerHandler("/login",new LoginHandler())注册一个 "/login" 路径的请求处理器后,我们可以通过以下方式来获取这个请求: 1. 在程序中创建一个服务器来处理请求,例如使用 Java 中的 Servlet、Spring MVC 或者其他类似的框架。在这个服务器中,我们可以通过监听来自客户端的请求,并将其路由到正确的处理器。 2. 当客户端发起一个请求时,服务器会接收到该请求并进行解析。服务器会检查请求的路径是否匹配 "/login",如果匹配则继续执行,否则会交给其他处理器来处理。 3. 当请求路径匹配 "/login" 后,服务器会找到对应的处理器实例,也就是之前注册的 LoginHandler 实例。 4. 然后,服务器会调用 LoginHandler 的相应方法来处理这个请求。这个方法可能会执行一些登录逻辑,比如验证用户凭证、检查数据库或者其他操作。 5. 处理器可以通过从请求中获取相关信息来完成处理,例如,可以通过请求参数、请求头或者请求体来获取用户提供的登录信息。 总的来说,当我们使用 builder.registerHandler("/login",new LoginHandler()) 注册一个请求处理器时,这个处理器会被服务器用于处理来自客户端的指定路径的请求。服务器会将请求路由到正确的处理器,使其能够获取到请求并执行相应的处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值