Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2011 19:23:12

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Русский URL

Привет всем!

Пишу сейчас на Flask всякую хрень для разминки мозгов и использую в урлах русские буквы.
До тех пор, пока работал с отладочным сервером, всё было просто прекрасно, но при попытке заставить работать это с nginx+fcgi, начались трудности в виде u“%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82” вместо u“Привет” в параметре контроллера.
Я решил проблему странным и зверским самоубийством:

@app.route('/<page>')
def page(page):
page = urllib.unquote(page.encode('utf8')).decode('utf8')
Таким образом получилась несовместимость между продакшн версией и разработческой, что меня совершенно не устраивает.

Путей решения малой кровью не вижу и поэтому спрашиваю у вас совета о том, как можно разрешить данную ситуацию.
Возможно, есть способ исправить урлу в nginx… Но в документации не нашёл.



Офлайн

#2 Фев. 15, 2011 20:20:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Русский URL

А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?



Офлайн

#3 Фев. 15, 2011 20:20:58

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Русский URL

Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.



Офлайн

#4 Фев. 16, 2011 11:00:42

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Русский URL

Андрей Светлов
А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?
Я думаю, что правильно кодироваться должно той странной ascii-строкой. Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст. Обрати внимание, что я получаю unicode, как и должно быть, просто где-то теряется преобразование. Сейчас попробую покопаться в коде… Но ведь без nginx и flup всё прекрасно!

Александр Кошелев
Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.
До этого я додумался. Уже скрутил у себя в голове декоратор, который будет это делать… Но это не красиво! Какое-то обезьянничество…



Офлайн

#5 Фев. 16, 2011 12:22:04

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Русский URL

ZZZ
Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст.
Да, нормально он все делает (у меня по крайней мере). Запускаю через wsgiref правда. Может во flupe дело.



Офлайн

#6 Фев. 16, 2011 17:07:40

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Русский URL

Решил эту проблему таким образом:

@manager.command
def runfcgi():
def fix_url_app(env, resp):
env['PATH_INFO'] = urllib.unquote(env['PATH_INFO'])
env['REQUEST_URI'] = urllib.unquote(env['REQUEST_URI'])
return app(env, resp)
print "Starting FastCGI server..."
WSGIServer(fix_url_app, bindAddress='fcgi.sock', umask=0000).run()
zheromo
Запускаю через wsgiref
Хм… А чем оно отличается от обычного “runserver -r”? Как нагрузку держит (хотя мне это не важно)?



Офлайн

#7 Фев. 16, 2011 22:37:27

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Русский URL

ZZZ
Как нагрузку держит
по сравнению с flup никакой разницы

на uwsgi вроде как быстрее, но надо тестировать…

Странно то что werkzeug точно делает unquote



Офлайн

#8 Фев. 17, 2011 08:31:56

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Русский URL

zheromo
по сравнению с flup никакой разницы
Надо будет попробовать.

zheromo
на uwsgi вроде как быстрее, но надо тестировать…
Не только тестировать, но и новый nginx собирать. А мне лень: пока в squeeze не появится, парится не буду.



Офлайн

#9 Фев. 17, 2011 09:28:54

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Русский URL

ZZZ
nginx последний стабильный есть в sid

Офлайн

#10 Фев. 17, 2011 10:00:47

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Русский URL

slav0nic
nginx последний стабильный есть в sid
Ну блин, я и так юзаю в продакшене ещё только тестируемый дистр, а ты предлагаешь перейти на нестабильную ветку? Нет уж… :-)

P.S. А то на днях был косяк, когда система просто отказалась загружаться с новым ядром. Слава Богу ничего сверх важного там небыло, а то в тот момент я ничем помочь не смог, кроме совета переписать граб на использование более старого ядра. :-/



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version