仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
来源:互联网 发布:淘宝运营浏览器插件 编辑:程序博客网 时间:2024/06/13 14:10
Django-Style URL Patterns for Flask
django的urls集中式路由控制相比flask通过装饰器来控制的确很一目了然,习惯了django的urls模式,突然改到flask还有点怀念,于是通过Flask.add_url_rule函数实现了一个仿django的urls模式。
github: https://github.com/pushiqiang/flask_url/tree/master/blog
目录结构
blog
---__init__.py
---settings.py
---urls.py
---views.py
post
---__init__.py
---urls.py
---views.py
url_resolvers
---__init__.py
---resolvers.py
注册urls.py的映射:
url_resolvers/resolvers.py
# -*- coding: utf-8 -*-import osfrom importlib import import_moduleimport sixfrom exceptions import ImproperlyConfiguredclass URLPattern(object): def __init__(self, regex, view, name, kwargs): self.regex = regex self.view = view self.kwargs = kwargs self.name = nameclass URLIncludePatterns(object): def __init__(self, urlconf_module): self.patterns = [] if isinstance(urlconf_module, six.string_types): try: urlconf_module = import_module(urlconf_module) except ImportError: raise ImproperlyConfigured('Urls is not configured correctly') self.patterns = getattr(urlconf_module, 'urlpatterns') if filter(lambda pattern: isinstance(pattern, URLIncludePatterns), self.patterns): raise ImproperlyConfigured( 'Using included patterns in an included URLconf is not allowed.')class RegexURLResolver(object): def __init__(self, regex, include, kwargs): self.patterns = include.patterns self.regex = regex self.kwargs = kwargs for pattern in self.patterns: if pattern.regex.startswith('/'): pattern.regex = os.path.join(regex, pattern.regex.lstrip('/')) else: pattern.regex = os.path.join(regex, pattern.regex)def url(regex, view, name=None, kwargs=None): # include if isinstance(view, URLIncludePatterns): return RegexURLResolver(regex, view, kwargs) # url elif callable(view): return URLPattern(regex, view, name, kwargs) else: raise TypeError('view must be a callable or a list/tuple in the case of include().')include = URLIncludePatternsdef auto_register_url(app): """ 自动注册url映射 """ try: urlconf_module = import_module(app.config['ROOT_URLCONF']) except (KeyError, ImportError): raise ImproperlyConfigured('ROOT_URLCONF is not configured correctly') url_patterns = getattr(urlconf_module, 'urlpatterns') for url_pattern in url_patterns: if isinstance(url_pattern, URLPattern): app.add_url_rule( url_pattern.regex, endpoint=url_pattern.name, view_func=url_pattern.view ) else: for pattern in url_pattern.patterns: app.add_url_rule( pattern.regex, endpoint=pattern.name, view_func=pattern.view )
使用:
__init__.py
# -*- coding: utf-8 -*-import osfrom flask import Flaskfrom url_resolvers.resolvers import auto_register_urlimport settingsBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))app = Flask(__name__)app.config.from_object(settings)# 自动注册urls路径auto_register_url(app)
配置:
settings.py
# -*- encoding: utf-8 -*-"""配置文件"""ROOT_URLCONF = 'blog.urls'
example:
# 根urls.py配置# -*- coding: utf-8 -*-from url_resolvers.resolvers import url, includefrom views import homeurlpatterns = [ url('/home/', home, ), url('/post/', include('post.urls')),]# app urls.py# -*- coding: utf-8 -*-from url_resolvers.resolvers import url, includefrom .views import indexurlpatterns = [ url('index/', index, name='index'),]
阅读全文
1 0
- 仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
- 【Flask】Flask和Django比较
- Flask、Django、Pyramid三个框架的对比
- Flask、Django、Pyramid三个框架的对比
- 查看Django和flask版本
- flask/django 动态查询表结构相同表名不同数据的Model实现
- Django中url的逆向解析 -> Reverse resolution of URLs
- Django中url的逆向解析 -> Reverse resolution of URLs
- Django中关于URL配置文件urls.py的理解
- Django中关于URL配置文件urls.py的理解
- flask django 上传文件
- Tornado-Django-Flask框架...
- Django urls.py的集中
- linux下搭建nginx,uwsgi和python的flask和django网站
- 【Django】urls.py中patterns后的第一个参数(1.8版本之前)
- django中urls和views的基本用法
- Flask 项目用到的插件和技术
- Flask 用Blueprint实现模块化的应用
- log4j配置示例
- 对于crudrepository怎么解决update的问题
- LINUX--hadoop部署
- Linux CAN通信
- 第二章 模型构建与选择
- 仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
- hibernate之一对多|多对多案例|关联映射(03)
- 什么是对象,为什么要面向对象,怎么才能面向对象?
- 如何利用charles迅速定位bug
- Android应用访问文本文件
- 跳表SkipList
- window下编译qt5.6.1含QWebengine模块开启MP4
- 负载均衡(SLB)使用最佳实践
- CSDN-markdown基本语法说明