未提供项目说明
lc-flask-routes的Python项目详细描述
烧瓶路径py
概述
FlaskWeb框架提供了装饰器@app.route
为路由定义处理程序,这是简单web应用程序的推荐方法。但是,使用此方法需要
这种路由处理程序与特定的应用程序相关联,因此很难跟踪/单元测试大型web应用程序的路由。
flask-routes-py
提供mixin,用于使用静态(classmethod
)处理程序将路由定义为类,并提供可选的附加项
{alike,集成了参数^的{
自动路由发现和注册到lc-registry。在
安装
从PyPi安装(首选方法)
pip install lc-flask-routes pip install lc-flask-routes[reqparser]# enable support for lc_flask_reqparser pip install lc-flask-routes[registry]# enable support for lc_registry pip install lc-flask-routes[all]# enable all options
使用Pip
从GitHub安装 ^{pr2}$其中x.x.x
是要下载的版本。在
手动下载安装
要下载源分发和/或控制盘文件,请导航到
https://github.com/libcommon/flask-routes-py/tree/releases/vx.x.x/dist
,其中x.x.x
是要安装的版本,
并通过用户界面或wget等工具进行下载。然后安装运行:
pip install <downloaded file>
下载后请不要更改文件名,因为Pip需要安装文件的特定命名约定。在
依赖关系
flask-routes-py
依赖于并设计为与
Flask framework。可选依赖项还包括
flask-reqparser-py用于集成请求参数解析,以及
lc-registry用于路由自动发现。只有Python版本>;=3.6才是
官方支持。在
入门
定义扩展BaseRouteMixin
或BaseRouteWithParserMixin
类的基类
(如果安装了[reqparser]
或[all]
选项),则所有其他路由类都将扩展。这个班可以
包含所有路由所需的任何helper方法或类变量,但是not应该定义ROUTE_MAP
类吗
变量。在
fromtypingimportAny,Dict,Optionalimportflaskfromlc_flask_routesimport(BaseRouteMixin,BaseRouteWithParserMixin,RouteResponse,WerkzeugLocalProxy)fromlc_flask_reqparserimportRequestParserclassBaseRoute(BaseRouteMixin):"""Base route."""__slots__=()classBaseParserRoute(BaseRouteWithParserMixin):"""Base route with request parser."""__slots__=()@classmethoddefgen_request_parser(cls)->Optional[RequestParser]:return(RequestParser().add_argument("base_argument_for_all_routes"))classIndexRoute(BaseRoute):"""Route: / Endpoint: "index" Description: Splash page """__slots__=()ROUTE_MAP={"/":{"endpoint":"index","methods":["GET","POST"]}}@classmethoddefget(cls,app:WerkzeugLocalProxy,request:WerkzeugLocalProxy,session:WerkzeugLocalProxy,route_kwargs:Dict[str,Any])->RouteResponse:return"<h1>Splash Page</h1>"@classmethoddefpost(cls,app:WerkzeugLocalProxy,request:WerkzeugLocalProxy,session:WerkzeugLocalProxy,route_kwargs:Dict[str,Any])->RouteResponse:returnflask.redirect(url_for("index"))if__name__=="__main__":app=flask.Flask(__name__)IndexRoute.register_route(app)app.run()
ROUTE_MAP
类变量只能在非基路由上定义,其结构与参数相似
对于Flask的@app.route
装饰器,它实际上调用了add_url_rule
在引擎盖下面。每个键都是一个URI,每个对应的值是传递给add_url_rule
的关键字参数。见烧瓶文件
对于该功能的期望和限制。BaseRouteMixin
有一个register_route
方法,它实现与@app.route
相同的结果。
{route必须单独注册(请参见下面的每个类)。在
如果与[registry]
或[all]
选项一起安装,flask-routes-py
还会公开一个用于自动发现的RouteRegistryMixin
类
使用元编程的路由类。定义一个扩展metaclass
的Python RouteRegistryMixin
,然后定义一个使用它的基类
metaclass
。在
fromabcimportABCMetafromtypingimportAny,Dictimportflaskfromlc_flask_routesimport(BaseRouteMixin,BaseRouteWithParserMixin,RouteResponse,WerkzeugLocalProxy)classRouteRegistry(RouteRegistryMixin,ABCMeta):"""Route registry."""__slots__=()_REGISTRY=dict()classBaseRoute(BaseRouteMixin,metaclass=RouteRegistry):"""Base route. Any child class will be registered in RouteRegistry's _REGISTRY class variable automatically (as long as it's in scope)."""classIndexRoute(BaseRoute):"""Route: / Endpoint: "index" Description: Splash page """__slots__=()ROUTE_MAP={"/":{"endpoint":"index","methods":["GET"]}}@classmethoddefget(cls,app:WerkzeugLocalProxy,request:WerkzeugLocalProxy,session:WerkzeugLocalProxy,route_kwargs:Dict[str,Any])->RouteResponse:return"<h1>Splash Page</h1>"classLoginRoute(BaseRoute):"""Route: /login Endpoint: "login" Description: Login workflow """__slots__=()ROUTE_MAP={"/login":{"endpoint":"login","methods":["POST"]}}@classmethoddefpost(cls,app:WerkzeugLocalProxy,request:WerkzeugLocalProxy,session:WerkzeugLocalProxy,route_kwargs:Dict[str,Any])->RouteResponse://Dosomeworktoverifyidentityreturnflask.redirect(url_for("index"))if__name__=="__main__":app=flask.Flask(__name__)# Register IndexRoute and LoginRoute with appRouteRegistry.register_routes(app)app.run()
RouteRegistryMixin
公开了两种向应用程序注册路由的方法:register_routes
和{register_routes
将注册注册表中的所有路由,而register_routes_where
在注册reach route类之前对它求值。例如,如果正在使用同一个注册表,这可能会很有用
基于类变量初始化两个不同的应用程序。在
贡献/建议
欢迎投稿和建议!要提出功能请求,请报告错误,或对现有的 功能,请提交问题。如需投稿,请提交一份个人简历,但请务必进行打印、类型检查和测试 你的代码。提前谢谢!在
- 项目
标签: