Неверные ссылки на билеты Web2py

На днях я начал играть с web2py для нового проекта. Мне очень нравится структура и вся концепция, которая кажется глотком свежего воздуха после нескольких лет работы с PHP-фреймворками.

Единственное (на данный момент), что меня беспокоит, это система продажи билетов. Каждый раз, когда я делаю ошибку, открывается страница со ссылкой на билет. Я думаю, я мог бы жить с этим, если бы ссылка работала. В настоящее время он указывает на страницу администратора с протоколом http вместо https. Я немного почитал, и принудительный https для администратора кажется мерой безопасности, но это усложняет отладку.

Какое здесь стандартное решение? Изменить страницу ошибки, разрешить http для администратора или использовать журналы для отладки?

С уважением Фредрик Полезно Бесполезно


person Fredrik    schedule 17.08.2010    source источник


Ответы (2)


Я был в той же лодке, что и вы, мне не понравился механизм по умолчанию. К счастью, настраиваемая обработка исключений с помощью web2py очень проста. Взгляните на route.py в корне вашего каталога web2py. Я добавил к себе следующее:

route_onerror = [('имя_приложения/*','/имя_приложения/ошибка/индекс')]

Это направляет любые исключения в мой контроллер обработчика ошибок (application_name/controllers/error.py), в котором я определил свой индекс определения как:

def index():
    if request.vars.code == '400':
        return(dict(app=request.application,
            ticket=None,
            traceback="A 400 error was raised, this is controller/method path not found",
            code=None,
            layer=None,
            wasEmailed=False))
    elif request.vars.code == '404':
        return(dict(app=request.application,
            ticket=None,
            traceback="A 404 error was raised, this is bad.",
            code=None,
            layer=None,
            wasEmailed=False))  
    else:
        fH = file('applications/%s/errors/%s' % (request.application,request.vars.ticket.split("/")[1]))
        e = cPickle.load(fH)
            fH.close()
            __sendEmail(request.application,e['layer'],e['traceback'],e['code'])
        return(dict(app=request.application,
            ticket=request.vars.ticket,
            traceback=e['traceback'],
            code=e['code'],
            layer=e['layer'],
            wasEmailed=True))

Как видите, для ошибок, отличных от 400 и 404, я отправляю трассировку себе по электронной почте, а затем вызываю соответствующий файл views/error/index.html. В производственной среде это представление дает общее сообщение «Извините, произошла ошибка, разработчикам отправлено письмо по электронной почте». На моем сервере разработки он отображает отформатированную трассировку.

person Mark    schedule 17.08.2010
comment
Спасибо за быстрый ответ Марк, это похоже на хорошее решение! - person Fredrik; 18.08.2010

Обычно я просто использую http://127.0.0.1/ (если вы находитесь локально или через ssh) или редактируете/ перейти по https://...

Таким образом, вы войдете в приложение администратора в первый раз, но всегда будете показывать билеты после.

person Alexandre Andrade    schedule 18.08.2010