我在python金字塔中做了一個簡單的身份驗證,這裏是security.py,我在做身份驗證部分。UndefinedError:'pyramid.util.Request對象'沒有'user'屬性
security.py
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from .models.user import User
class MyAuthenticationPolicy(AuthTktAuthenticationPolicy):
def authenticated_userid(self, request):
user = request.user
if user is not None:
return user.id
def get_user(request):
user_id = request.unauthenticated_userid
if user_id is not None:
user = request.dbsession.query(User).get(user_id)
return user
def includeme(config):
settings = config.get_settings()
authn_policy = MyAuthenticationPolicy(
settings['auth.secret'],
hashalg='sha512',
)
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(ACLAuthorizationPolicy())
config.add_request_method(get_user, 'user', reify=True)
設置被添加到,對於第一次運行,並且也被添加到請求的請求方法的初始化文件。
這裏是我的登錄視圖文件,基本上檢查用戶名和密碼後,編寫記憶代碼和存儲用戶信息,但可能是這部分不起作用。
default.py
@view_config(route_name='auth', match_param='action=in', renderer='string',
request_method='POST')
@view_config(route_name='auth', match_param='action=out', renderer='string')
def sign_in_out(request):
username=request.POST.get('username')
if username:
user=UserService.by_name(username)
if user and user.verify_password(request.POST.get('password')):
headers=remember(request,user.name)
return HTTPFound(location=request.route_url('admin'),headers=headers)
else:
headers=forget(request)
return HTTPFound(location=request.route_url('home'),headers=headers)
驗證用戶名和密碼後,在這裏。我已籤部分工作正在做這從上面 標題=記(請求,user.name) 回報HTTPFound(位置= request.route_url(「管理」),標題=標題)
複製管理路線呈現admin.jinja2所以在文件 admin.jinja2
welcome {{request.user.name}}
這樣扔下我一個錯誤 jinja2.exceptions.UndefinedError
UndefinedError: 'pyramid.util.Request object' has no attribute 'user'
你怎麼包括'安全'? –
根文件夾中的__init__.py中的config.include('。security') –
2想到的事情:a)'get_user'拋出AttributeError,或者b)'includeme'實際上沒有運行(也許你應該在那裏調試打印) –