Python 未定义错误:';pyramid.util.Request对象';没有属性';用户';
我在python pyramid中执行一个简单的身份验证,这里是security.py,我在这里执行身份验证部分 security.pyPython 未定义错误:';pyramid.util.Request对象';没有属性';用户';,python,authentication,pyramid,pylons,Python,Authentication,Pyramid,Pylons,我在python pyramid中执行一个简单的身份验证,这里是security.py,我在这里执行身份验证部分 security.py from pyramid.authentication import AuthTktAuthenticationPolicy from pyramid.authorization import ACLAuthorizationPolicy from .models.user import User class MyAuthenticationPolicy
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)
@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)
设置被添加到第一次运行的init文件中,request方法也被添加到request中
这是我的登录视图文件,基本上是在检查用户名和密码、编写记住代码和存储用户信息之后,但可能这部分不起作用
default.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)
@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)
这里验证用户名和密码后。我已经检查了部件是否正常工作,我是从上面复制的
headers=记住(请求、用户名)
返回HTTPFound(location=request.route\u url('admin'),headers=headers)
admin路由在文件中呈现admin.jinja2 so
管理金甲2
welcome {{request.user.name}}
这样做会让我犯错误
jinja2.异常。未定义错误
UndefinedError:“pyramid.util.Request对象”没有属性“user”
您如何在根文件夹的init.py中包含
security
?config.include('.security')2您会想到:a)get\u user
throws AttributeError,或b)includeme
实际上没有运行(也许您应该在那里调试打印)嘿,很酷,您正在使用新的未发布金字塔脚手架。看起来好像没有调用includeme
函数,所以您应该仔细检查以确定。是的,我正在使用仍在进行中的金字塔文档。你能帮我查一下吗。我们通常是如何在金字塔中调试的?我对它有点陌生。谢谢