Django-style url handling for Flask
Inspired by this stackoverflow question. this package is an attempt to generalize the concept of Django-like url-view / endpoint-mapping.
The package is in the python package index.
pip install flask-url-mapping
Centerpiece is an urls.py which contains the mapping.
urls = [
("/", views.index), # 1
("/login", views.login, ["GET", "POST"]), # 2
("/home", "home.urls") # 3
("/admin", views.admin, ["GET"], "admin_role"), # 4
]
There are four ways to map routes to endpoints
- route to endpoint, http method default is GET
- route to endpoint with array of http methods
- route to component see Components
- route to endpoint with array of http methods and required role
After declaring your url mapping You can register the urls to the flask app via register_urls
- wsgi.py
from flask import Flask
from flask_url_mapping import FlaskUrls
from urls import urls
app = Flask(__name__)
if __name__ == '__main__':
flask_urls = FlaskUrls(app)
flask_urls.register_urls(urls)
app.run()
- urls.py
from views import *
urls = [
("/", hello_world, ["GET"])
]
- views.py
def hello_world():
return 'Hello World!'
When adding a role to a route endpoint mapping your project has to use flask_login
A component is a subfolder which contains at least an urls.py and an views.py When this folder also contains a templates directory, it will be automatically added to the jinja2 search path for html templates