url
simple url
from sniper.url import url
urls = [
url(r'^/$', hello_world),
]
Its first argument is a regexp pattern with match the path of request.
Its second argument is a controller function. see Controller.
url with method
from sniper.url import url
urls = [
url(r'^/$', hello_world, method='POST'),
]
now, hello_world
can only be visited by POST request.
urls with path data
from sniper.responses import Response
from sniper.url import url
def user(request, name):
return Response('user name is %s' % name)
urls = [
url(r'^/user/(?P<name>\w+)$', user)
]
visit /user/Elephant
, you will get output: user name is Elephant
.
urls with specific data
urls = [
url(r'^/author$', user, data={'name': 'Elephant'])
]
name will be Elephant
in user function.
Specific data has higher priority.
urls = [
url(r'^/user/(?P<name>\w+)$', user, data={'name': 'Elephant})
]
name
param will always be Elephant
no matter what url you visit if it matches ^/test/(?P<name>\w+)$
pattern.
include sub urls
from sniper.url import url, include
sub_urls = [
url(r'^/hello$', hello_world),
]
urls = [
include(r'^/test', sub_urls)
]
the path for hello_world
will be /test/hello
.
specific controler when include sub urls
You can specific a controller when include sub urls and omit the controller param inside sub urls.
This is usefull when route multiple path to same controller with different data.
But if you also provide controller param inside sub urls, the inner one takes effect.
sub_urls = [
url(r'^/foo$', data={'action': 'foo'}),
url(r'^/bar$', data={'action': 'bar'}),
url(r'^/baz$', goodbye_world, data={'action': 'baz'}),
]
urls = [
include(r'^/hello', sub_urls, controller=hello_world),
]