【问题标题】:How to have usernames with webapp2's User model?如何使用 webapp2 的用户模型获得用户名?
【发布时间】:2011-12-26 16:55:02
【问题描述】:

我成功使用 webapp2 可以验证和登录/注销用户,并且我有一个装饰器来知道用户是否已登录并且这有效:

class MyPageHandler(NewBaseHandler):
    """
    Only accessible to users that are logged in
    """
    @user_required
    def get(self):
        user = self.auth.get_user_by_session()
        self.render_template('mypage.htm', {'user': self.auth.get_user_by_session()})

现在我想添加一些基本的用户名,我怀疑我可能不必继承 webapp2_extras 提供的 User 模型,因为它是一个 Expando 模型。您能告诉我如何添加用户名或使用用户名更新用户吗?我没有尝试,但我相信我可以显示 auth_id 但它与用户名不同?

谢谢

更新

似乎用户模型是一个扩展模型,例如在创建用户时,您“只需添加属性”即可:

    username = self.request.POST.get('username')
    password = self.request.POST.get('password')
    # Passing password_raw=password so password will be hashed
    # Returns a tuple, where first value is BOOL. If True ok, If False no new user is created
    user = self.auth.store.user_model.create_user(username, password_raw=password)
    user.name = username

我没有彻底测试上面的代码,但似乎使用 webapp2 我们不需要子类化 User 类来获得功能。

解决方案/解决方法

class SecureRequestHandler(BaseHandler):
    """
        Only accessible to users that are logged in
    """
    @user_required
    def get(self, **kwargs):
        a = self.app.config.get('foo')
        auser = self.auth.get_user_by_session() 
        userid = auser['user_id']
        user = auth_models.User.get_by_id(auser['user_id'])
        try:
            return "Secure zone %s <a href='%s'>Logout</a>" % (user.name, self.auth_config['logout_url'])
        except (AttributeError, KeyError), e:
            return "Secure zone"

【问题讨论】:

    标签: python google-app-engine session webapp2


    【解决方案1】:

    希望有帮助

    from webapp2_extras.appengine.auth.models import User
    from ndb import key, model
    
    class MUser(User): # child class of User
        displayname = model.StringProperty() # show on screen, auto create 'user-{id}'
        lastaccess = model.DateTimeProperty(auto_now=True)
    
        @classmethod
        def update_or_insert_user(cls, user):
            """update some user's prop if exited else create new muser
            return : MUser object or None
            """
            u = MUser.get_by_auth_id(user.email())
            if u is None:                               
                ok, u = MUser.create_user(user.email(), id=newid)
                if ok == True:
                    u.displayname = 'user-'+str(u.get_id())
                else:
                    log.error('create new user error : ' + user.email())
                    u = None
            else :          
                u.put() # Update last access (auto fill def in model class)
    
            return u
    
    class MyPageHandler(NewBaseHandler):
        """
        Only accessible to users that are logged in
        """
        @user_required
        def get(self):
            user = self.get_current_muser()
            self.render_template('mypage.htm', {'user': user.displayname })
    
        def get_current_muser(self):
            # come from gae login page, convert current gae user to muser
            user = users.get_current_user() # google users
            if user:
                # user have login, try to create or update
                log.info('create user')
                mu = MUser.update_or_insert_user(user)
                if mu:
                    # save to session
                    self.session['muserid'] = mu.key.id()
                    return mu
    
            return None
    

    【讨论】:

      猜你喜欢
      • 2013-08-12
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多