2010-04-28 49 views
6

Tengo un par de proyectos en Django y alterno entre uno y otro de vez en cuando. Todos ellos tienen un/media/path, que es servido por django.views.static.serve, y todos tienen un archivo /media/css/base.css.Cómo prevenir HTTP 304 en el servidor de prueba Django

El problema es que cada vez que ejecuto un proyecto, las solicitudes a base.css devuelven un HTTP 304 (no modificado), probablemente porque la marca de tiempo no ha cambiado. Pero cuando ejecuto el otro proyecto, se devuelve el mismo 304, haciendo que el navegador use el archivo almacenado en caché por el proyecto anterior (y por lo tanto, usando la hoja de estilo incorrecta).

Sólo para que conste, aquí están las clases de middleware:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.transaction.TransactionMiddleware', 
) 

siempre uso la dirección por defecto http://localhost:8000. ¿Hay alguna otra solución (aparte de usar diferentes puertos, 8001, 8002, etc.)?

+0

Hola @Augusto Men. Si no quieres usar el puerto predeterminado 8000, entonces puedes darle tu puerto as-python manage.py runserver 8001 –

Respuesta

11

Puede rodar su propio middleware para que:

class NoIfModifiedSinceMiddleware(object): 
    def process_request(self, request): 
     request.META.pop('HTTP_IF_MODIFIED_SINCE', None) 

Básicamente, sólo se elimina el encabezado HTTP_IF_MODIFIED_SINCE partir de la solicitud.

De último momento: O puede monkeypatch django.views.static.serve y reemplazar was_modified_since función por uno, que siempre devuelve True.

+0

hola @alex vasi! Tengo el mismo problema, por favor, eloboree su respuesta para que pueda entender cómo puedo aplicar el código anterior. –

+0

Lectura en middlewares, son fáciles y los documentos de django son increíbles. Para la parte "monopatch", que requeriría que ubique dónde está instalado el módulo djagno, edite django/view/static/serve como se indica en la respuesta. –

+0

Tenga en cuenta que al insertar este middleware, debe ser el primer middleware en la lista para trabajar. Gracias por la solución! –

Cuestiones relacionadas