Недействительные ссылки в билете Web2py - PullRequest
4 голосов
/ 17 августа 2010

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

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

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

С наилучшими пожеланиями Фредрик

Ответы [ 2 ]

4 голосов
/ 17 августа 2010

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

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

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

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. В производственной среде это представление дает общий вид: «Извините, произошла ошибка, разработчики получили по электронной почте». На моем сервере разработки отображается отформатированная трассировка.

0 голосов
/ 19 августа 2010

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

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

...