pasteob.PathMap, передача параментов

5 views
Skip to first unread message

u960

unread,
Jun 13, 2010, 2:21:54 AM6/13/10
to Пишем на Python лучше
По разным префиксам нужны вызывать одно и тоже приложение
например
app['/a'] = a_app
app['/b'] = a_app

если в приложение a_app передать url path (/a, /b), конечно проще
всего в самом приложении распарсить урл и все, но как то это.

Алексей С.

unread,
Jun 13, 2010, 2:26:08 AM6/13/10
to Пишем на Python лучше
прочитал, и нифига не понял, не проснулся еще)
нужно в приложение передовать префикс в виде параметра

13 июня 2010 г. 10:21 пользователь u960 <phli...@gmail.com> написал:

Sergey Schetinin

unread,
Jun 13, 2010, 4:42:20 AM6/13/10
to better-p...@googlegroups.com
Либо реализуйте a_app в виде класса и передавайте использованый
префикс в конструктор, либо используйте req.script_name.

2010/6/13 Алексей С. <phli...@gmail.com>:

> --
> Группа: http://groups.google.com/group/better-python-ru
> Отписка: better-python-...@googlegroups.com

--
Best Regards,
Sergey Schetinin

http://self.maluke.com/ -- My articles and open-source stuff
http://www.maluke.com/ -- My commercial software and custom development services

Алексей С.

unread,
Jun 14, 2010, 3:58:25 PM6/14/10
to better-p...@googlegroups.com
понятно, спасибо.

кстати когда префикс только слэш (app['/']) , то приложение по этому
префиксы обрабатывает вообще все запросы,
и поэтому ни каких 404 ошибок. Почему так сделано?

И как сделать чтобы были 404 ошибки и чтобы приложение навесить на "/'


13 июня 2010 г. 12:42 пользователь Sergey Schetinin <mal...@gmail.com> написал:

Алексей С.

unread,
Jun 14, 2010, 4:31:19 PM6/14/10
to better-p...@googlegroups.com
и еще офтоп:

@wapp
def a_app(req):
a = 'some value'
return SomeApp()

как передать переменную 'а' в какой нить(в любой) метод класса SomeApp?

1. в конструктор не хочется, не настолько эта переменная значимая, и
вообще она може быть не одна, в этом смысле лучше наверное что нить
типа SomeApp(locals()), но не хочется через конструтор))

2. или php way загнать переменную в обьект запроса


13 июня 2010 г. 12:42 пользователь Sergey Schetinin <mal...@gmail.com> написал:

Sergey Schetinin

unread,
Jun 14, 2010, 5:31:18 PM6/14/10
to better-p...@googlegroups.com
2010/6/14 Алексей С. <phli...@gmail.com>:

> понятно, спасибо.
>
> кстати когда префикс только слэш (app['/']) , то приложение по этому
> префиксы обрабатывает вообще все запросы,
> и поэтому ни каких 404 ошибок. Почему так сделано?
>
> И как сделать чтобы были 404 ошибки и чтобы приложение навесить на "/'


Диспатчинг в PathMap идет по префиксу. Если нужно диспатчить по точным
совпадениям, то используйте PathMatch.

Sergey Schetinin

unread,
Jun 14, 2010, 5:33:27 PM6/14/10
to better-p...@googlegroups.com
2010/6/14 Алексей С. <phli...@gmail.com>:

> и еще офтоп:
>
> @wapp
> def a_app(req):
>    a = 'some value'
>    return SomeApp()
>
> как передать переменную 'а' в какой нить(в любой) метод класса SomeApp?
>
> 1. в конструктор не хочется, не настолько эта переменная значимая, и
> вообще она може быть не одна, в этом смысле лучше наверное что нить
> типа SomeApp(locals()), но не хочется через конструтор))
>
> 2. или php way загнать переменную в обьект запроса

Именно для этого и сделан ReqAddon. Я могу привести пример, но лучше
снала расскажите что за значения нужно передавать и зачем, тогда
пример будет в тему.

Алексей С.

unread,
Jun 15, 2010, 11:48:24 AM6/15/10
to better-p...@googlegroups.com
15 июня 2010 г. 1:33 пользователь Sergey Schetinin <mal...@gmail.com> написал:

> 2010/6/14 Алексей С. <phli...@gmail.com>:
>> и еще офтоп:
>>
>> @wapp
>> def a_app(req):
>>    a = 'some value'
>>    return SomeApp()
>>
>> как передать переменную 'а' в какой нить(в любой) метод класса SomeApp?
>>
>> 1. в конструктор не хочется, не настолько эта переменная значимая, и
>> вообще она може быть не одна, в этом смысле лучше наверное что нить
>> типа SomeApp(locals()), но не хочется через конструтор))
>>
>> 2. или php way загнать переменную в обьект запроса
>
> Именно для этого и сделан ReqAddon. Я могу привести пример, но лучше
> снала расскажите что за значения нужно передавать и зачем, тогда
> пример будет в тему.

кое какие данные для шаблона(для вьюшек так сказать), или признак авторизации.
@wapp
def a_app(req):
logged_in = req.cookies.get('logged_in') // хочется передавать
эту переменную в другие приложения
if logged_in is None:
raise HTTPForbidden()
...
return SomeApp()

...
return SomeApp2()

Sergey Schetinin

unread,
Jun 15, 2010, 12:19:01 PM6/15/10
to better-p...@googlegroups.com
2010/6/15 Алексей С. <phli...@gmail.com>:


class AuthInfo(ReqAddon):
def __init__(self, req):
self.logged_in = req.cookies.get('logged_in')


@wapp
def a_app(req):
if AuthInfo(req).logged_in is None:
raise HTTPForbidden()
return SomeApp()

или скажем так

class TmplInfo(ReqAddon):
pass

@wapp
def a_app(req):
info = TmplInfo(req)
info.x = 1
return tmpl_app

@wapp
def tmpl_app(req):
info = TmplInfo(req)
return Response(str(info.x))

Подробней написано в доктесте.

Так понятней что за ReqAddon?

Алексей С.

unread,
Jun 15, 2010, 1:08:08 PM6/15/10
to better-p...@googlegroups.com
15 июня 2010 г. 20:19 пользователь Sergey Schetinin <mal...@gmail.com> написал:

а в SomeApp нужно сделать обьект от AuthInfo
или SomeApp должен наследоваться от ReqAddon, ну так же как AuthInfo

Sergey Schetinin

unread,
Jun 15, 2010, 1:15:41 PM6/15/10
to better-p...@googlegroups.com

Что значит "сделать объект от"? Если речь о том чтобы получить аддон
вызовом AuthInfo(req), то да, именно так его и нужно там получить.

> или SomeApp должен наследоваться от ReqAddon, ну так же как AuthInfo

Приложения от ReqAddon наследовать не нужно.

Reply all
Reply to author
Forward
0 new messages