framework - python pyramid tutorial
Pirámide: la página 404 personalizada regresa como "200 OK" (4)
Tengo una vista 404 personalizada definida en mi aplicación Pyramid:
@view_config(context=HTTPNotFound, renderer=''404.pt'')
def not_found(self, request):
return {}
Funciona bien, excepto que el código de estado HTTP enviado con el contenido es 200 OK, lo cual no está bien de ninguna manera. Estoy teniendo el mismo problema con 403 Forbidden. ¿Cómo puedo hacer que Pyramid envíe el código de estado correcto?
Aquí es cómo puede usar directamente el enganche 404 y renderizar una plantilla mientras lo hace.
En tu init .py:
config.add_notfound_view(not_found)
En su view.py:
from pyramid.view import notfound_view_config
from pyramid.renderers import render_to_response
def not_found(request):
request.response.status = 404
t = ''talk_python_to_me_com:templates/errors/404.pt''
return render_to_response(t, {}, request)
Hice esto para Talk Python To Me: http://www.talkpythontome.com/ , aquí hay una página no válida para ver una plantilla personalizada representada.
En realidad, en la pirámide 1.3 hay un nuevo decorador @notfound_view_config.
@notfound_view_config(renderer = ''404_error.jinja2'')
def notfound(request):
request.response.status = 404
La mejor manera de hacerlo es anular la vista predeterminada No se encuentra:
Incluso en este escenario, debe devolver un objeto de respuesta adecuado que tenga un estado de 404:
def notfound(request):
return Response(''Not Found, dude'', status=''404 Not Found'')
Para tomar el ejemplo de la página enlazada arriba.
La vista de excepción es una vista separada que proporciona un lugar para que haga lo que quiera. Al igual que cualquier vista que utiliza un renderizador, puede afectar el objeto de respuesta a través de request.response
para modificar su comportamiento. El renderizador luego rellena el cuerpo.
@view_config(context=HTTPNotFound, renderer=''404.pt'')
def not_found(self, request):
request.response.status = 404
return {}