Форум сайта python.su
Привет всем!
Пишу сейчас на 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')
Офлайн
А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?
Офлайн
Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.
Офлайн
Андрей СветловЯ думаю, что правильно кодироваться должно той странной ascii-строкой. Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст. Обрати внимание, что я получаю unicode, как и должно быть, просто где-то теряется преобразование. Сейчас попробую покопаться в коде… Но ведь без nginx и flup всё прекрасно!
А, кстати, как правильно будет? Ну если чисто по IETF - как следует кодировать?
Александр КошелевДо этого я додумался. Уже скрутил у себя в голове декоратор, который будет это делать… Но это не красиво! Какое-то обезьянничество…
Сделайте настройку в зависимости от который, либо преобразуйте урл, либо нет. И в разных окружениях выставите соответствующее значение настройке.
Офлайн
ZZZДа, нормально он все делает (у меня по крайней мере). Запускаю через wsgiref правда. Может во flupe дело.
Но что-то мне подсказывает, что werkzeug должен уметь правильно её читать и преобразовывать в нормальный текст.
Офлайн
Решил эту проблему таким образом:
@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Хм… А чем оно отличается от обычного “runserver -r”? Как нагрузку держит (хотя мне это не важно)?
Запускаю через wsgiref
Офлайн
ZZZпо сравнению с flup никакой разницы
Как нагрузку держит
Офлайн
zheromoНадо будет попробовать.
по сравнению с flup никакой разницы
zheromoНе только тестировать, но и новый nginx собирать. А мне лень: пока в squeeze не появится, парится не буду.
на uwsgi вроде как быстрее, но надо тестировать…
Офлайн
ZZZ
nginx последний стабильный есть в sid
Офлайн
slav0nicНу блин, я и так юзаю в продакшене ещё только тестируемый дистр, а ты предлагаешь перейти на нестабильную ветку? Нет уж… :-)
nginx последний стабильный есть в sid
Офлайн