Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2010 11:26:44

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

Если я пишу в wsgi-скрипт:

def application(environ, start_response):
start_response('200 OK', [('Content-type', 'text/html')])
return str(environ)
то любой url адрес http://localhost/wsgi/ или http://localhost/wsgi/other/folder или http://localhost/wsgi/other/folder/?with=param
обрабатывается внутри функции application

Когда я использую bottle, то перед функцией-обработчиком я должен писать что-то типа
@route( '/', method='POST' )
Если я пишу method='POST', то GET-переменными я уже ни имею право пользоваться?
Причём, если я обращаюсь к http://localhost/wsgi/other/folder, то получаю ошибку 404.
Можно ли сделать, чтобы точка входа для всех адресов осталась одна, и все переменные post и get были бы доступны?



Офлайн

#2 Июль 15, 2010 15:57:19

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

> GET-переменными я уже ни имею право пользоваться?
способ 1) через реквест к любым параметрам

    request.POST
request.GET
request.COOKIE
2) в роуте:
@route( '/:name', method='POST' )
def main(name):
...
а ещё роуты можно складывать:
@route( '/')
@route( '/', method='POST' )
@route( '/main/')
def main():

Отредактировано (Июль 15, 2010 15:58:07)

Офлайн

#3 Июль 15, 2010 16:55:25

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

делаю:

@route( '/' )
@route( '/:name', method='POST' )
def main():
а затем обращаюсь по адресу http://localhost/wsgi/?session=null → то получаю нормальный ответ.
если я обращаюсь по адресу http://localhost/wsgi/dd?session=null то пишет, что страница не найдена.



Офлайн

#4 Июль 15, 2010 17:02:49

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

И, насколько я понял, @route( ‘/:name’) не будет переадресовывать всё на корневую директорию.
При таком описании она только http://localhost/wsgi/dd может обработать, а http://localhost/wsgi/dd/ee уже не обработает.
Там парсинг происходит по “/”.



Офлайн

#5 Июль 15, 2010 18:01:07

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

axe
делаю:
@route( '/' )
@route( '/:name', method='POST' )
def main():
а затем обращаюсь по адресу http://localhost/wsgi/?session=null → то получаю нормальный ответ.
если я обращаюсь по адресу http://localhost/wsgi/dd?session=null то пишет, что страница не найдена.
все правильно, т.к. ‘/:name’ только для post в коде указан.

Офлайн

#6 Июль 15, 2010 18:03:53

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

axe
И, насколько я понял, @route( ‘/:name’) не будет переадресовывать всё на корневую директорию.
При таком описании она только http://localhost/wsgi/dd может обработать, а http://localhost/wsgi/dd/ee уже не обработает.
Там парсинг происходит по “/”.
для /dd/ee, можно сделать так: @route( ‘/:parent/:name’), а вообще для специфических урлов можно использовать regex выражение

Офлайн

#7 Июль 15, 2010 18:22:56

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

o7412369815963
все правильно, т.к. ‘/:name’ только для post в коде указан.
и все возможные варианты нужно перечилять?
@route( '/' )
@route( '/', method='POST' )
и т.д.



Офлайн

#8 Июль 15, 2010 18:38:39

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

mod_wsgi + bottle: единая точка входа

надо сначала определиться что хош сделать.

я использую 1 роут на 1 ф-ию в 95% случаях, и это удобно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version