You are using an outdated browser

Traversal

правильный способ обработки URL

Регулярные выражения

«традиционный» способ

Route → View

Route → View

 

 

/user/vpupkin/blog/42/like

 

/user/vpupkin/blog/42/like

 

/user/vpupkin/blog/42/like

 

/user/vpupkin/blog/42/like

 

/user/vpupkin/blog/42/like

 

/user/vpupkin/blog/42/like

{'user_id': 'vpupkin', 'post_id': '42'}

Traversal

Resource + View name → View

Resource + View name → View

Resource + View name → View

@view_config(context=Resource, name='someview')
def someview(context, request):

Resource

Resource

Resource

Resource

SiteRoot['user']
    Users['{user_id}']
        User['blog']
            Blog['{post_id}']
                BlogPost

/user/vpupkin/blog/42/like

 

 

['user', 'vpupkin', 'blog', '42', 'like']

context = root_factory()# <SiteRoot object>

 

['vpupkin', 'blog', '42', 'like']

context = context['user']# <Users object>

 

['blog', '42', 'like']

context = context['vpupkin']# <User object>

 

['42', 'like']

context = context['blog']# <Blog object>

 

['like']

context = context['42']# <BlogPost object>

 

[]

context = context['like']# <BlogPost object>

KeyError: 'like'

[]

context = BlogPost('42')

view_name = 'like'

Зачем так сложно?

Resource + views = изолированный компонент

SiteRoot
    Users
        User
            Blog
    Groups
        Group
            Blog
    Blog

SiteRoot
    Users
        User
            Blog
    Groups
        Group
            Blog
    Blog

SiteRoot
    Users
        User
            Blog
    Groups
        Group
            Blog
    Blog

Mixins

Commentable add_comment, delete_comment

Likeable like, unlike

Commentable add_comment, delete_comment

Likeable like, unlike

Commentable add_comment, delete_comment

Likeable like, unlike

Commentable add_comment, delete_comment

Likeable like, unlike

Бонусы

Простой и логичный реверс-роутинг

resource_url(resource, view_name)

ACL

Blog

BlogPost

  •  (Allow, owner_id, 'edit')

Blog

BlogPost

Тесты

Спасибо за внимание