2012-05-14 17 views
5

Estoy tratando de entrenar cómo/la mejor y más segura forma de mantener separados los datos de un usuario dentro de un sitio django que necesito escribir.django: mantenga separados los datos de cada usuario

Aquí está un ejemplo de lo que tengo que hacer ...

ejemplo aplicación ToDoList

Usando contrib.auth Django para gestionar usuarios/contraseñas, etc, voy a tener los siguientes usuarios

Tom Jim Lee

habrá un modelo de Tareas (en mi verdadera aplicación habrá modelos adicionales)

class ToDo(models.Model): 
    user = models.ForeignKey(User) 
    description = models.CharField(max_length=20) 
    details = models.CharField(max_length=50) 
    created = models.DateTimeField('created on') 

El problema que estoy teniendo - y puede ser más pensando en esto: ¿Cómo sería esto puede bloquear de manera tom sólo puede ver la lista de tareas de Tom, heces sólo puede ver su lista de tareas y así sucesivamente ...

He visto algunas publicaciones que indican que se puede usar el filtro en cada consulta, o el uso de URL, por lo que la URL podría ser como www.dominio.com/nombre de usuario/ato

Pero de cualquier manera no estoy seguro de si esto es la forma correcta/mejor manera, o loco en términos de detener a los usuarios a ver los datos de los demás

aplausos

Richard

Respuesta

8

Un método consiste en filtrar los elementos de tareas pendientes por el usuario actualmente conectado:

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 

from your_app.models import ToDo 

@login_required 
def todos_for_user(request): 
    todos = ToDo.objects.filter(user=request.user) 
    return render(request, 'todos/index.html', {'todos' : todos}) 

Esto traba abajo de la vista sólo para usuarios autenticados, y filtrado por el usuario conectado a la solicitud , otro usuario, incluso si está conectado, no puede acceder a los registros de ToDo de otro usuario. Espero que te ayude.

+0

Hola, gracias al ejemplo, esa es la forma en que se siente bien, voy a ir con este método, acabo de escribir un ejemplo de aplicación de tareas pendientes y esto funciona bien. – Richard

+0

Impresionante. Me alegro de poder ayudar. – Brandon

1

Hacer url como www.domain.com/username/todo es una forma de implementarlo, pero no garantiza la seguridad.

lo que debe hacer mantener la información de inicio de sesión del usuario en datos de la sesión después de iniciar sesión de usuario, y cada vez que revise cierto punto de vista,

  1. comprobación de si ese usuario en particular tiene derecho a ver este punto de vista.
  2. usando la información de inicio de sesión del usuario (ID o nombre de usuario) al consultar la lista Todo del usuario.

Y supongo que este enlace te ayudará a hacer tu trabajo.

Sessions, Users, and Registration.

+0

No es necesario utilizar explícitamente la información de la sesión. La forma estándar de django es solo filtrar con request.user –

+0

. Solo quería mostrarles de manera más básica. para hacer el trabajo :) ¡Pero gracias! –

+0

Sólo un FYI, request.user se establece por el marco de la sesión. Es inusual tener que usar el marco de sesión directamente.No una vez tuve que usar el marco de la sesión (aunque sí tiene su lugar). –

Cuestiones relacionadas