- Python Pyramid - Home
- Python Pyramid - Overview
- Pyramid - Environment Setup
- Python Pyramid - Hello World
- Pyramid - Application Configuration
- Python Pyramid - Url Routing
- Python Pyramid - View Configuration
- Python Pyramid - Route Prefix
- Python Pyramid - Templates
- Pyramid - HTML Form Template
- Python Pyramid - Static Assets
- Python Pyramid - Request Object
- Python Pyramid - Response Object
- Python Pyramid - Sessions
- Python Pyramid - Events
- Python Pyramid - Message Flashing
- Pyramid - Using SQLAlchemy
- Python Pyramid - Cookiecutter
- Python Pyramid - Creating A Project
- Python Pyramid - Project Structure
- Python Pyramid - Package Structure
- Creating A Project Manually
- Command Line Pyramid
- Python Pyramid - Testing
- Python Pyramid - Logging
- Python Pyramid - Security
- Python Pyramid - Deployment
- Python Pyramid Useful Resources
- Python Pyramid - Quick Guide
- Python Pyramid - Useful Resources
- Python Pyramid - Discussion
Python Pyramid - Route Prefix
Many times, similar URL patterns are registered with different routes in more than one Python code modules. For example, we have a student_routes.py where /list and /add URL patterns are registered with 'list' and 'add' routes. The view functions associated with these routes are list() and add(), respectively.
#student_routes.py
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config( route_name='add')
def add(request):
return Response('add student')
@view_config(route_name='list')
def list(request):
return Response('Student list')
def students(config):
config.add_route('list', '/list')
config.add_route('add', '/add')
config.scan()
These routes will eventually be registered when the students() function is called.
At the same time, there is book_routes.py, in which the same URLs /list and add/ are registered to 'show' and 'new' routes. Their associated views are list() and add() respectively. The module has books() function which adds the routes.
#book_routes.py
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config( route_name='new')
def add(request):
return Response('add book')
@view_config(route_name='show')
def list(request):
return Response('Book list')
def books(config):
config.add_route('show', '/list')
config.add_route('new', '/add')
config.scan()
Obviously, there is a conflict between URL patterns as '/list' and '/add' point to two routes each and this conflict must be resolved. This is done by using the route_prefix parameter of the config.include() method.
The first parameter to config.include() is the function which adds the routes, and the second is the route_prefix string which will be prepended to the URL pattern used in the included function.
Hence, the statement
config.include(students, route_prefix='/student')
will result in the '/list' URL pattern changed to '/student/list' and '/add' becomes 'student/add'. Similarly, we can add prefix to these URL patterns in the books() function.
config.include(books, route_prefix='/books')
Example
The code that starts the server is as below −
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from student_routes import students
from book_routes import books
if __name__ == '__main__':
with Configurator() as config:
config.include(students, route_prefix='/student')
config.include(books, route_prefix='/book')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
Output
Let us run the above code and test the routes by following CURL commands.
C:\Users\Acer>curl localhost:6543/student/list Student list C:\Users\Acer>curl localhost:6543/student/add add student C:\Users\Acer>curl localhost:6543/book/add add book C:\Users\Acer>curl localhost:6543/book/list Book list