• [python]pyramid 学习3 (route)


    模式1: main中add_view

    projectname/__init__.py main方法中加入

    from views import myview
    config.add_route('myroute', '/prefix/{one}/{two}')
    config.add_view(myview, route_name='myroute')

    projectname/views.py中加入方法

    from pyramid.response import Response
    def myview(request):
    return Response(request.matchdict['one']+"#"+request.matchdict['two'])
    浏览器访问
    127.0.0.1:6543/prefix/1/2 查看效果

     

    模式2 main中使用scan

    projectname/__init__.py main方法中加入路由规则

    config.add_route('scan','/scan/{one}')
    config.scan("projectname")

    projectname/views.py中加入方法

    from pyramid.response import Response
    from pyramid.view import view_config

    @view_config(route_name="scan")
    def scan(request):
    return return Response(request.matchdict['one'])
    浏览器访问
    127.0.0.1:6543/scan/test 查看效果


    路由语法规则

    *

    /foo/*fizzle
    /foo/La%20Pe%C3%B1a/a/b/c
    {'fizzle':(u'La Pe\xf1a', u'a', u'b', u'c')}

    .

    foo/{baz}/{bar}{fizzle:.*}
    foo/1/2/ -> {'baz':u'1', 'bar':u'2', 'fizzle':()}
    foo/abc/def/a/b/c -> {'baz':u'abc', 'bar':u'def', 'fizzle': u'a/b/c')}

    生成url

    config.add_route('scan','/scan/{one}')
    url = request.route_url('scan', one='1000')

    404

    config.add_view('pyramid.view.append_slash_notfound_view',
    context='pyramid.httpexceptions.HTTPNotFound')

    自定义404

    from pyramid.httpexceptions import HTTPNotFound
    from pyramid.view import AppendSlashNotFoundViewFactory

    def notfound_view(context, request):
    return HTTPNotFound('It aint there, stop trying!')

    custom_append_slash = AppendSlashNotFoundViewFactory(notfound_view)
    config.add_view(custom_append_slash, context=HTTPNotFound)

    route debug

    PYRAMID_DEBUG_ROUTEMATCH=true \ paster serve development.ini

    route include

    def add_views(config):
    config.add_view('myapp.views.view1', name='view1')
    config.add_view('myapp.views.view2', name='view2')

    config.include(add_views)

    include prefix

    def users_include(config):
    config.add_route('show_users', '/show')

    config.include(users_include, route_prefix='/users')
    /users/show


    Custom Route

    def any_of(segment_name, *allowed):
    def predicate(info, request):
    if info['match'][segment_name] in allowed:
    return True
    return predicate

    num_one_two_or_three = any_of('num', 'one', 'two', 'three')

    config.add_route('route_to_num', '/{num}',
    custom_predicates=(num_one_two_or_three,))
    /one
    /two
    /three
    def integers(*segment_names):
    def predicate(info, request):
    match = info['match']
    for segment_name in segment_names:
    try:
    match[segment_name] = int(match[segment_name])
    except (TypeError, ValueError):
    pass
    return True
    return predicate

    ymd_to_int = integers('year', 'month', 'day')

    config.add_route('ymd', '/{year}/{month}/{day}',
    custom_predicates=(ymd_to_int,))
  • 相关阅读:
    百度前端技术学院task35源代码——听指令的小方块3
    百度前端技术学院task34源码——会指令的小块2
    ManyToManyField 增加记录
    同一个页面多个按钮,根据按钮名字执行相应功能
    django 函数装饰器 变为 类装饰器
    script 跳出小窗口
    django 把函数装饰器变为方法装饰器
    modelform添加属性
    Cannot assign “A1”: “B1” must be a “C1” instance.
    Django form choices, placeholder
  • 原文地址:https://www.cnblogs.com/bluefrog/p/2218373.html
Copyright © 2020-2023  润新知