comparison src/server/server.py @ 978:c8cafe316f6f

pages: removed trailing_slash option: this option is used for relative URLs, but it seems more reasonable to build absolute URL from the server, so templates are not dependants of the way the pages hierarchy is done.
author Goffi <goffi@goffi.org>
date Sun, 12 Nov 2017 12:51:56 +0100
parents 4aa38c49bff7
children 1d558dfb32ca
comparison
equal deleted inserted replaced
977:d0de2a98e852 978:c8cafe316f6f
1303 class LiberviaPage(web_resource.Resource): 1303 class LiberviaPage(web_resource.Resource):
1304 isLeaf = True # we handle subpages ourself 1304 isLeaf = True # we handle subpages ourself
1305 named_pages = {} 1305 named_pages = {}
1306 uri_callbacks = {} 1306 uri_callbacks = {}
1307 1307
1308 def __init__(self, host, root_dir, url, name=None, redirect=None, trailing_slash=False, access=None, parse_url=None, 1308 def __init__(self, host, root_dir, url, name=None, redirect=None, access=None, parse_url=None,
1309 prepare_render=None, render=None, template=None, on_data_post=None): 1309 prepare_render=None, render=None, template=None, on_data_post=None):
1310 """initiate LiberviaPages 1310 """initiate LiberviaPages
1311 1311
1312 LiberviaPages are the main resources of Libervia, using easy to set python files 1312 LiberviaPages are the main resources of Libervia, using easy to set python files
1313 The arguments are the variables found in page_meta.py 1313 The arguments are the variables found in page_meta.py
1321 @param redirect(unicode, None): if not None, this page will be redirected. A redirected 1321 @param redirect(unicode, None): if not None, this page will be redirected. A redirected
1322 parameter is used as in self.pageRedirect. parse_url will not be skipped 1322 parameter is used as in self.pageRedirect. parse_url will not be skipped
1323 using this redirect parameter is called "full redirection" 1323 using this redirect parameter is called "full redirection"
1324 using self.pageRedirect is called "partial redirection" (because some rendering method 1324 using self.pageRedirect is called "partial redirection" (because some rendering method
1325 can still be used, e.g. parse_url) 1325 can still be used, e.g. parse_url)
1326 @param trailing_slash(bool): if True, page will be redirected to (url + '/') if url is not already ended by a '/'.
1327 This is specially useful for relative links
1328 @param access(unicode, None): permission needed to access the page 1326 @param access(unicode, None): permission needed to access the page
1329 None means public access. 1327 None means public access.
1330 Pages inherit from parent pages: e.g. if a "settings" page is restricted to admins, 1328 Pages inherit from parent pages: e.g. if a "settings" page is restricted to admins,
1331 and if "settings/blog" is public, it still can only be accessed by admins. 1329 and if "settings/blog" is public, it still can only be accessed by admins.
1332 see C.PAGES_ACCESS_* for details 1330 see C.PAGES_ACCESS_* for details
1370 raise ValueError(_(u"you can't use full page redirection with other rendering method," 1368 raise ValueError(_(u"you can't use full page redirection with other rendering method,"
1371 u"check self.pageRedirect if you need to use them")) 1369 u"check self.pageRedirect if you need to use them"))
1372 self.redirect = redirect 1370 self.redirect = redirect
1373 else: 1371 else:
1374 self.redirect = None 1372 self.redirect = None
1375 self.trailing_slash = trailing_slash
1376 self.parse_url = parse_url 1373 self.parse_url = parse_url
1377 self.prepare_render = prepare_render 1374 self.prepare_render = prepare_render
1378 self.template = template 1375 self.template = template
1379 self.render_method = render 1376 self.render_method = render
1380 self.on_data_post = on_data_post 1377 self.on_data_post = on_data_post
1417 host, 1414 host,
1418 dir_path, 1415 dir_path,
1419 u'/' + u'/'.join(new_path), 1416 u'/' + u'/'.join(new_path),
1420 name=page_data.get('name'), 1417 name=page_data.get('name'),
1421 redirect=page_data.get('redirect'), 1418 redirect=page_data.get('redirect'),
1422 trailing_slash = page_data.get('trailing_slash'),
1423 access=page_data.get('access'), 1419 access=page_data.get('access'),
1424 parse_url=page_data.get('parse_url'), 1420 parse_url=page_data.get('parse_url'),
1425 prepare_render=page_data.get('prepare_render'), 1421 prepare_render=page_data.get('prepare_render'),
1426 render=page_data.get('render'), 1422 render=page_data.get('render'),
1427 template=page_data.get('template'), 1423 template=page_data.get('template'),
1817 1813
1818 def renderPage(self, request, skip_parse_url=False): 1814 def renderPage(self, request, skip_parse_url=False):
1819 """Main method to handle the workflow of a LiberviaPage""" 1815 """Main method to handle the workflow of a LiberviaPage"""
1820 # template_data are the variables passed to template 1816 # template_data are the variables passed to template
1821 if not hasattr(request, 'template_data'): 1817 if not hasattr(request, 'template_data'):
1822 if self.trailing_slash and request.path and not request.path[-1] == '/':
1823 return web_util.redirectTo(request.path + '/', request)
1824 session_data = self.host.getSessionData(request, session_iface.ISATSession) 1818 session_data = self.host.getSessionData(request, session_iface.ISATSession)
1825 csrf_token = session_data.csrf_token 1819 csrf_token = session_data.csrf_token
1826 request.template_data = {u'csrf_token': csrf_token} 1820 request.template_data = {u'csrf_token': csrf_token}
1827 1821
1828 # XXX: here is the code which need to be executed once 1822 # XXX: here is the code which need to be executed once