瀏覽代碼

create routes

Chuan Miao 9 年之前
父節點
當前提交
35a2ac11bc
共有 2 個文件被更改,包括 206 次插入14 次删除
  1. 5 14
      applications/service/routes.py
  2. 201 0
      routes.py

+ 5 - 14
applications/service/routes.example.py → applications/service/routes.py

@@ -18,21 +18,12 @@
 #
 # YOU CAN COPY THIS FILE TO ANY APPLICATION'S ROOT DIRECTORY WITHOUT CHANGES!
 
-from fileutils import abspath
-from languages import read_possible_languages
-
-possible_languages = read_possible_languages(abspath('applications', app))
-#NOTE! app - is an application based router's parameter with name of an
-#            application. E.g.'welcome'
-
-routers = {
-    app: dict(
-        default_language = possible_languages['default'][0],
-        languages = [lang for lang in possible_languages
-                           if lang != 'default']
-    )
-}
 
 #NOTE! To change language in your application using these rules add this line
 #in one of your models files:
 #   if request.uri_language: T.force(request.uri_language)
+
+routes_in = (
+    ('/service/sql/(?P<group>\w+)/(?P<sensor>\w+)', '/service/sql/data/\g<group>/\g<sensor>'),
+    ('/service/sql/(?P<group>\w+)/(?P<sensor>\w+)\.$anything', '/service/sql/data/\g<group>/\g<sensor>\.$anything'),
+)

+ 201 - 0
routes.py

@@ -0,0 +1,201 @@
+# -*- coding: utf-8 -*-
+
+# default_application, default_controller, default_function
+# are used when the respective element is missing from the
+# (possibly rewritten) incoming URL
+#
+default_application = 'init'    # ordinarily set in base routes.py
+default_controller = 'default'  # ordinarily set in app-specific routes.py
+default_function = 'index'      # ordinarily set in app-specific routes.py
+
+# routes_app is a tuple of tuples.  The first item in each is a regexp that will
+# be used to match the incoming request URL. The second item in the tuple is
+# an applicationname.  This mechanism allows you to specify the use of an
+# app-specific routes.py. This entry is meaningful only in the base routes.py.
+#
+# Example: support welcome, admin, app and myapp, with myapp the default:
+
+
+routes_app = ((r'/(?P<app>welcome|admin|app|service)\b.*', r'\g<app>'),
+              (r'(.*)', r'myapp'),
+              (r'/?(.*)', r'myapp'))
+
+# routes_in is a tuple of tuples.  The first item in each is a regexp that will
+# be used to match the incoming request URL. The second item in the tuple is
+# what it will be replaced with.  This mechanism allows you to redirect incoming
+# routes to different web2py locations
+#
+# Example: If you wish for your entire website to use init's static directory:
+#
+#   routes_in=( (r'/static/(?P<file>[\w./-]+)', r'/init/static/\g<file>') )
+#
+
+BASE = ''  # optonal prefix for incoming URLs
+
+routes_in = (
+    ('/service/sql/(?P<group>\w+)/(?P<sensor>\w+)', '/service/sql/data/\g<group>/\g<sensor>'),
+    ('/service/sql/(?P<group>\w+)/(?P<sensor>\w+)\.$anything', '/service/sql/data/\g<group>/\g<sensor>\.$anything'),
+    # do not reroute admin unless you want to disable it
+    (BASE + '/admin', '/admin/default/index'),
+    (BASE + '/admin/$anything', '/admin/$anything'),
+    # do not reroute appadmin unless you want to disable it
+    (BASE + '/$app/appadmin', '/$app/appadmin/index'),
+    (BASE + '/$app/appadmin/$anything', '/$app/appadmin/$anything'),
+    # do not reroute static files
+    (BASE + '/$app/static/$anything', '/$app/static/$anything'),
+    # reroute favicon and robots, use exable for lack of better choice
+    ('/favicon.ico', '/examples/static/favicon.ico'),
+    ('/robots.txt', '/examples/static/robots.txt'),
+    # do other stuff
+    ((r'.*http://otherdomain\.com.* (?P<any>.*)', r'/app/ctr\g<any>')),
+    # remove the BASE prefix
+    (BASE + '/$anything', '/$anything'),
+)
+
+# routes_out, like routes_in translates URL paths created with the web2py URL()
+# function in the same manner that route_in translates inbound URL paths.
+#
+
+routes_out = (
+    # do not reroute admin unless you want to disable it
+    ('/admin/$anything', BASE + '/admin/$anything'),
+    # do not reroute appadmin unless you want to disable it
+    ('/$app/appadmin/$anything', BASE + '/$app/appadmin/$anything'),
+    # do not reroute static files
+    ('/$app/static/$anything', BASE + '/$app/static/$anything'),
+    # do other stuff
+    (r'.*http://otherdomain\.com.* /app/ctr(?P<any>.*)', r'\g<any>'),
+    (r'/app(?P<any>.*)', r'\g<any>'),
+    # restore the BASE prefix
+    ('/$anything', BASE + '/$anything'),
+)
+
+# Specify log level for rewrite's debug logging
+# Possible values: debug, info, warning, error, critical (loglevels),
+#                  off, print (print uses print statement rather than logging)
+# GAE users may want to use 'off' to suppress routine logging.
+#
+logging = 'debug'
+
+# Error-handling redirects all HTTP errors (status codes >= 400) to a specified
+# path.  If you wish to use error-handling redirects, uncomment the tuple
+# below.  You can customize responses by adding a tuple entry with the first
+# value in 'appName/HTTPstatusCode' format. ( Only HTTP codes >= 400 are
+# routed. ) and the value as a path to redirect the user to.  You may also use
+# '*' as a wildcard.
+#
+# The error handling page is also passed the error code and ticket as
+# variables.  Traceback information will be stored in the ticket.
+#
+# routes_onerror = [
+#     (r'init/400', r'/init/default/login')
+#    ,(r'init/*', r'/init/static/fail.html')
+#    ,(r'*/404', r'/init/static/cantfind.html')
+#    ,(r'*/*', r'/init/error/index')
+# ]
+
+# specify action in charge of error handling
+#
+# error_handler = dict(application='error',
+#                      controller='default',
+#                      function='index')
+
+# In the event that the error-handling page itself returns an error, web2py will
+# fall back to its old static responses.  You can customize them here.
+# ErrorMessageTicket takes a string format dictionary containing (only) the
+# "ticket" key.
+
+# error_message = '<html><body><h1>%s</h1></body></html>'
+# error_message_ticket = '<html><body><h1>Internal error</h1>Ticket issued: <a href="/admin/default/ticket/%(ticket)s" target="_blank">%(ticket)s</a></body></html>'
+
+# specify a list of apps that bypass args-checking and use request.raw_args
+#
+#routes_apps_raw=['myapp']
+#routes_apps_raw=['myapp', 'myotherapp']
+
+
+def __routes_doctest():
+    '''
+    Dummy function for doctesting routes.py.
+
+    Use filter_url() to test incoming or outgoing routes;
+    filter_err() for error redirection.
+
+    filter_url() accepts overrides for method and remote host:
+        filter_url(url, method='get', remote='0.0.0.0', out=False)
+
+    filter_err() accepts overrides for application and ticket:
+        filter_err(status, application='app', ticket='tkt')
+
+    >>> import os
+    >>> import gluon.main
+    >>> from gluon.rewrite import regex_select, load, filter_url, regex_filter_out, filter_err, compile_regex
+    >>> regex_select()
+    >>> load(routes=os.path.basename(__file__))
+
+    >>> os.path.relpath(filter_url('http://domain.com/favicon.ico'))
+    'applications/examples/static/favicon.ico'
+    >>> os.path.relpath(filter_url('http://domain.com/robots.txt'))
+    'applications/examples/static/robots.txt'
+    >>> filter_url('http://domain.com')
+    '/init/default/index'
+    >>> filter_url('http://domain.com/')
+    '/init/default/index'
+    >>> filter_url('http://domain.com/init/default/fcn')
+    '/init/default/fcn'
+    >>> filter_url('http://domain.com/init/default/fcn/')
+    '/init/default/fcn'
+    >>> filter_url('http://domain.com/app/ctr/fcn')
+    '/app/ctr/fcn'
+    >>> filter_url('http://domain.com/app/ctr/fcn/arg1')
+    "/app/ctr/fcn ['arg1']"
+    >>> filter_url('http://domain.com/app/ctr/fcn/arg1/')
+    "/app/ctr/fcn ['arg1']"
+    >>> filter_url('http://domain.com/app/ctr/fcn/arg1//')
+    "/app/ctr/fcn ['arg1', '']"
+    >>> filter_url('http://domain.com/app/ctr/fcn//arg1')
+    "/app/ctr/fcn ['', 'arg1']"
+    >>> filter_url('HTTP://DOMAIN.COM/app/ctr/fcn')
+    '/app/ctr/fcn'
+    >>> filter_url('http://domain.com/app/ctr/fcn?query')
+    '/app/ctr/fcn ?query'
+    >>> filter_url('http://otherdomain.com/fcn')
+    '/app/ctr/fcn'
+    >>> regex_filter_out('/app/ctr/fcn')
+    '/ctr/fcn'
+    >>> filter_url('https://otherdomain.com/app/ctr/fcn', out=True)
+    '/ctr/fcn'
+    >>> filter_url('https://otherdomain.com/app/ctr/fcn/arg1//', out=True)
+    '/ctr/fcn/arg1//'
+    >>> filter_url('http://otherdomain.com/app/ctr/fcn', out=True)
+    '/fcn'
+    >>> filter_url('http://otherdomain.com/app/ctr/fcn?query', out=True)
+    '/fcn?query'
+    >>> filter_url('http://otherdomain.com/app/ctr/fcn#anchor', out=True)
+    '/fcn#anchor'
+    >>> filter_err(200)
+    200
+    >>> filter_err(399)
+    399
+    >>> filter_err(400)
+    400
+    >>> filter_url('http://domain.com/welcome', app=True)
+    'welcome'
+    >>> filter_url('http://domain.com/', app=True)
+    'myapp'
+    >>> filter_url('http://domain.com', app=True)
+    'myapp'
+    >>> compile_regex('.*http://otherdomain.com.* (?P<any>.*)', '/app/ctr\g<any>')[0].pattern
+    '^.*http://otherdomain.com.* (?P<any>.*)$'
+    >>> compile_regex('.*http://otherdomain.com.* (?P<any>.*)', '/app/ctr\g<any>')[1]
+    '/app/ctr\\\\g<any>'
+    >>> compile_regex('/$c/$f', '/init/$c/$f')[0].pattern
+    '^.*?:https?://[^:/]+:[a-z]+ /(?P<c>\\\\w+)/(?P<f>\\\\w+)$'
+    >>> compile_regex('/$c/$f', '/init/$c/$f')[1]
+    '/init/\\\\g<c>/\\\\g<f>'
+    '''
+    pass
+
+if __name__ == '__main__':
+    import doctest
+    doctest.testmod()