我是金字塔的新手,我正在遵循这个指南:http: //docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki2/authorization.html
在Django中,视图和URL工作或者崩溃了,但是我从来没有遇到过在views.py和urls.py中明确定义的网页会出现404错误的情况,这种情况从未发生在我身上.如果其中任何一个出现问题,它都会崩溃,而不会抛出404.
我正在构建一个维基页面以获取金字塔上的东西,但在我继续学习本教程之前,我已经碰壁了.
我的init .py文件设置如下:
def main(global_config, **settings):
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.bind = engine
authn_policy = AuthTktAuthenticationPolicy(
'sosecret', callback=groupfinder, hashalg='sha512')
authz_policy = ACLAuthorizationPolicy()
config = Configurator(settings=settings,
root_factory='tutorial.models.RootFactory')
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(authz_policy)
config.include('pyramid_chameleon')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('view_wiki', '/')
config.add_route('view_page', '/{pagename}')
config.add_route('add_page', '/add_page/{pagename}')
config.add_route('edit_page', '/{pagename}/edit_page')
config.add_route('login', '/login')
config.add_route('logout', '/logout')
config.scan()
return config.make_wsgi_app()
Run Code Online (Sandbox Code Playgroud)
我的views.py文件设置如下:
@view_config(route_name='login', renderer='templates/login.pt')
@forbidden_view_config(renderer='templates/login.pt')
def login(request):
login_url = request.route_url('login')
referrer = request.url
if referrer == login_url:
referrer = '/' # never use the login form itself as came_from
came_from = request.params.get('came_from', referrer)
message = ''
login = ''
password = ''
if 'form.submitted' in request.params:
login = request.params['login']
password = request.params['password']
if USERS.get(login) == password:
headers = remember(request, login)
return HTTPFound(location = came_from,
headers = headers)
message = 'Failed login'
return dict(
message = message,
url = request.application_url + '/login',
came_from = came_from,
login = login,
password = password,
)
@view_config(route_name='logout')
def logout(request):
headers = forget(request)
return HTTPFound(location = request.route_url('view_wiki'),
headers = headers)
Run Code Online (Sandbox Code Playgroud)
到目前为止,应用程序运行良好,但登录和注销完全无效.我应该至少得到一个堆栈跟踪崩溃,但我刚刚给出404错误...
我关闭了应用程序并且pserve development.ini --reload没有任何东西......他们只是不在那里......
我把它放在我的网址中:
0.0.0.0:6446/FrontPage <== WORKS
0.0.0.0:6446/login <== 404未找到,找不到资源.没有这样的页面
我不太确定如何调试声称不存在的东西......可能是什么问题?我将所有模板保存在同一位置,并且我将edit_page视图与登录视图进行比较,它们非常相同,但登录显然不存在....为什么?
尝试把登录放在前面/{pagename}。该路由系统在遇到第一个匹配时停止并处理它。反转以静态字符串开头的所有其他页面(例如/foo:)
config.add_route('login', '/login')
config.add_route('logout', '/logout')
config.add_route('add_page', '/add_page/{pagename}')
config.add_route('view_page', '/{pagename}')
config.add_route('edit_page', '/{pagename}/edit_page')
Run Code Online (Sandbox Code Playgroud)