Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未定义错误:';pyramid.util.Request对象';没有属性';用户';_Python_Authentication_Pyramid_Pylons - Fatal编程技术网

Python 未定义错误:';pyramid.util.Request对象';没有属性';用户';

Python 未定义错误:';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

我在python pyramid中执行一个简单的身份验证,这里是security.py,我在这里执行身份验证部分

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)
@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
函数,所以您应该仔细检查以确定。是的,我正在使用仍在进行中的金字塔文档。你能帮我查一下吗。我们通常是如何在金字塔中调试的?我对它有点陌生。谢谢