基于模式匹配的wsgi兼容url路由工具

decoroute的Python项目详细描述


基于装饰样式和模式匹配的url路由库。没有框架! 非常紧凑。核心逻辑少100行代码。符合wsgi。不需要额外的api。

完整示例

import decoroute

app = decoroute.App(prefix='')

# pure WSGI
@app.expose('/wsgi/<id:\d+>')
@decoroute.wsgi('wsgiorg.routing_args')
def wsgi_app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return environ['wsgiorg.routing_args']

# pass variables into **kw
def render_response(status = '200 OK', content_type = 'text/plain', add_headers = [], **context):
    return status, [('Content-Type', content_type)] + add_headers, context

@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
    return render_response(id = id)

@app.expose('/url_for')
def url_for(env):
    return render_response(url = app.url_for(node, id = 666))

@app.expose('/404')
def not_found(env):
    raise decoroute.NotFound()

@app.not_found
def not_found_handler(env):
    return render_response(status = '404 NF', **env)

@app.render
def render(env, (status, headers, context)):
    context['site_uri'] = '%s://%s' % (env['wsgi.url_scheme'], env['HTTP_HOST'])
    return status, headers, ['%s=%s\n' %(k, context[k]) for k in context.keys()] # fake templating

from wsgiref.simple_server import make_server

make_server('', 6666, app).serve_forever()

提示

如果你提出你的观点(django术语)。在ror-controller中)在另一个模块中,组织如下代码 werkzeug

# utils.py

import decoroute
app = decoroute.App()
# view.py and anoter

from utils import *

@app.render
def render(env, ...)
    # returns of your endpoints pass to render handler
    # in render use your prefered template engine and return triple
    # status, generator of response headers, generator of response body
    # ( generator / iterator / list - any )
    # if you use default render endpoints must be return triple

@app.not_found
    # no route enpoint
    # it also pass to render handler

@app.expose('/node', id = '1')
@app.expose('/node/<id:\d+>')
def node(env, id):
    # endpoint passed some variables
    # env is a wsgi environ
    # id = '1' default value of parameter
    #   all parameters must be <type 'str'>
    # <id:\d+> parameter pattern;
    #   \d+ specify regexp constraint of parameter (required)
# manage.py - main module

from utils import app
import view # and all other

if __name__ == '__main__':
    # serve app here

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javapojo到org。布森。文件,反之亦然   java突然增加了G1老一代的承诺内存,减少了Eden的大小   java为什么对多个RXJava观察对象不执行并行执行?   java中的枚举是故障安全的吗?如果是,怎么做?   java是等待字符串变为相等的正确方法   java CodeAbbey挑战14个数据输入问题?   在java中的任意位置插入。util。列表   java替换html中的值   java需要帮助破译一个小堆栈跟踪:我使用的是哪种WS?   java Guice依赖项注入器空指针异常   java如何在3D引擎中实现视图剪裁平面?   JavaEclipseRCP:操作与命令需要更新   java如何使用XPAGES DesignerFacesServlet显示泰语字母(以及另一个亚洲/阿拉伯字母)   java装饰器模式问题   java我对空间复杂性的分析正确吗?   不显示java OpenGL ES 2纹理   使用java问题中的wc命令计算行数   java为什么空指针异常取决于条件的顺序?   Java日期在同一天或同一个月   java在使用lambda表达式时在变量中存储一些值