Найти - Пользователи
Полная версия: Русский URL
Начало » Web » Русский URL
1 2
ZZZ
Привет всем!

Пишу сейчас на 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… Но в документации не нашёл.
Андрей Светлов
А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?
Александр Кошелев
Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.
ZZZ
Андрей Светлов
А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?
Я думаю, что правильно кодироваться должно той странной ascii-строкой. Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст. Обрати внимание, что я получаю unicode, как и должно быть, просто где-то теряется преобразование. Сейчас попробую покопаться в коде… Но ведь без nginx и flup всё прекрасно!

Александр Кошелев
Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.
До этого я додумался. Уже скрутил у себя в голове декоратор, который будет это делать… Но это не красиво! Какое-то обезьянничество…
zheromo
ZZZ
Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст.
Да, нормально он все делает (у меня по крайней мере). Запускаю через wsgiref правда. Может во flupe дело.
ZZZ
Решил эту проблему таким образом:
@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”? Как нагрузку держит (хотя мне это не важно)?
zheromo
ZZZ
Как нагрузку держит
по сравнению с flup никакой разницы

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

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

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

P.S. А то на днях был косяк, когда система просто отказалась загружаться с новым ядром. Слава Богу ничего сверх важного там небыло, а то в тот момент я ничем помочь не смог, кроме совета переписать граб на использование более старого ядра. :-/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB