Pregunta

A menudo me muestro mensajes acerca de las acciones del usuario a los usuarios registrados en mis puntos de vista de aplicaciones Django utilizando:

request.user.message_set.create("message to user")

¿Cómo podría hacer lo mismo para el anonimato (no conectado) a los usuarios? No hay ninguna request.user para los usuarios anónimos, pero la documentación de Django dice que el uso del middleware "sesión" que puede hacer lo mismo que el código de seguridad. La documentación de Django que enlaza con el middleware sesión afirma que es posible, pero no pudo encontrar la manera de hacerlo de la documentación de la sesión.

¿Fue útil?

Solución

http://code.google.com/p/django-session -Los mensajes / hasta que el parche que permite a las tierras de sesión basado en mensajes árbol de Django (como vi hace poco, se ha marcado para 1.2, así que no hay esperanza para la adición rápida ...).

Otro proyecto con una funcionalidad similar es Django flash ( http://djangoflash.destaquenet.com/ ) .

Otros consejos

Esto es lo que hago, utilizando procesadores de contexto:

project/application/context.py (comprobar los mensajes y añadirlos al contexto):

def messages(request):
    messages = {}
    if 'message' in request.session:
        message_type = request.session.get('message_type', 'error')
        messages = {'message': request.session['message'],
                    'message_type': message_type}
        del request.session['message']
        if 'message_type' in request.session:
            del request.session['message_type']
    return messages

project/settings.py (añadir el contexto de la TEMPLATE_CONTEXT_PROCESSORS):

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.core.context_processors.debug",
    "django.core.context_processors.media",
    "django.core.context_processors.auth",
    "project.application.context.messages",  
)

Con lo anterior, el messages función será llamada en cada petición y lo devuelve será añadido al contexto de la plantilla. Con esto en su lugar, si quiero dar a un usuario un mensaje, yo puedo hacer esto:

def my_view(request):
    if someCondition:
        request.session['message'] = 'Some Error Message'

Por último, en una plantilla que sólo puede comprobar si hay errores en la pantalla:

{% if message %}
    <div id="system_message" class="{{ message_type }}">
        {{ message }}
    </div>
{% endif %}

El tipo de mensaje se usa sólo para el estilo en función de lo que es ( "error", "aviso", "éxito") y la forma en que esta es la configuración sólo se puede añadir al menos 1 mensaje a la vez para un usuario, pero esto es todo lo que realmente alguna vez necesito por lo que funciona para mí. Podría ser fácilmente cambiada para permitir múltiples mensajes y tal.

Almacenar los datos directamente en la sesión, que es un objeto dict-similares. Luego, en la vista / plantilla, comprobar el valor.

Más información aquí:

http: // docs. djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views

También podría crear una clase middleware para comprobar si el objeto de sesión en cada petición, y hacer su acumulación / derribar allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top