2013-04-14 11 views
1

всем! Я использую Flask для создания веб-сайта. Но когда я открываю 127.0.0.1:5000, он возвращает AttributeError: объект 'Anonymousidentity' не имеет атрибута 'name'. Анонимность определена в flask.ext.principal. Я прочитал флягу-main/init .py, где определено анонимность, нет атрибута 'name', ни в классе 'Identity'.AttributeError: объект 'Anonymousidentity' не имеет атрибута 'name'

Я новичок и понятия не имею, где проблема. Пусть кто-то может мне помочь, любое предложение также оценено! :)

Адрес учетной записи/service.py. Ошибка возникает в четкости CURRENT_USER (идентичности = None), возвращение models.User.query.get (identity.name)

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from __future__ import unicode_literals 

from flask import current_app, g, render_template 
from flask.ext.mail import Message 
from flask.ext.principal import identity_changed, identity_loaded 
from flask.ext.principal import Identity, AnonymousIdentity 
from flask.ext.principal import RoleNeed, UserNeed 

from ..extensions import db, mail 
from ..permissions import roles 
from . import models, account 


get_appobj = lambda: current_app._get_current_object() 


# ------------------------------- 
# Login and Logout (Authenticate) 
# ------------------------------- 

def login(user): 
    """User login.""" 
    identity_changed.send(get_appobj(), identity=Identity(user.id)) 


def logout(): 
    """User logout.""" 
    identity_changed.send(get_appobj(), identity=AnonymousIdentity()) 


def current_user(identity=None): 
    identity = identity or g.identity 
    return models.User.query.get(identity.name) 


@account.app_context_processor 
def account_context_processor(): 
    return {'current_user': current_user} 


@identity_loaded.connect 
def on_identity_loaded(sender, identity): 
    """Load the roles for identity user.""" 
    user = current_user(identity) 
    if user: 
     identity.provides.add(UserNeed(user.id)) 
     identity.provides.add(roles.login) 
     if user.is_actived: 
      identity.provides.add(roles.authenticated) 
     if user.is_admin: 
      identity.provides.add(roles.admin) 
     if user.is_branch: 
      identity.provides.add(roles.branch) 


# ------------------------------ 
# Sign Up and Email Confirm User 
# ------------------------------ 

def send_confirm_mail(user): 
    """Send a confirm mail for signing up user.""" 
    if user.is_actived: 
     raise models.UserAcitvedError(user) # only provide for unactived user 

    with user.permissions['send_confirm_mail'].require(403): 
     message = Message("grasu", 
          sender="[email protected]", 
          recipients=[user.email]) 
     message.html = render_template("mail/activeuser.html", 
             userid=user.id, 
             token=user.active_token) 
     mail.send(message) 


def signup(user): 
    """Sign up a user.""" 
    # check unique 
    users = models.User.query 
    identity_existed = users.filter_by(email=user.email).count() 
    nickname_has_been_used = users.filter_by(nickname=user.nickname).count() 
    if identity_existed: 
     raise IdentityExistedError 
    if nickname_has_been_used: 
     raise NicknameUsedError 

    # write into database 
    db.session.add(user) 
    db.session.commit() 

    # login and send mail 
    login(user) 
    send_confirm_mail(user) 


# ---------- 
# Exceptions 
# ---------- 

class IdentityExistedError(Exception): 
    """User's email has existed in database.""" 


class NicknameUsedError(Exception): 
    """User's nickname has been used.""" 

ответ

1

Как вы уже заметили, что нет name атрибута. Вместо этого используйте атрибут id.

return models.User.query.get(identity.id) 
+0

спасибо! Я также нашел эту проблему. Поскольку venv на сервере зависит от фляги-main-2.0, а venv на моем компьютере зависит от фляги-main-3.5. :) – fangwz0577