2012-05-14 20 views
5

Sto cercando di allenarmi come/il modo migliore e più sicuro per tenere separati i dati di un utente all'interno di un sito django che devo scrivere.django: mantenere separati i dati di ciascun utente

Ecco un esempio di quello che ho bisogno di fare ...

esempio app ToDoList

Utilizzando contrib.auth Django per gestire utenti/password, ecc, avrò i seguenti utenti

tom jim lee

ci sarà un modello ToDo (nel mio applicazione reale ci saranno altri modelli)

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') 

Il problema che sto avendo - e potrebbe essere passato pensando che questo: Come sarebbe bloccato in modo tom può vedere solo la lista delle cose da fare di Tom, Lee non può che vedere la sua lista delle cose da fare e così via ...

Ho visto alcuni messaggi che affermano che è possibile utilizzare il filtro in ogni query o utilizzare gli URL, quindi l'URL potrebbe essere simile a www.dominio.com/nomeutente/todo

Ma in entrambi i casi non sono sicuro se questo sia nel modo giusto/modo migliore, o bonkers in termini di fermare gli utenti vedendo i rispettivi dati

applausi

Richard

risposta

8

Un approccio consiste nel filtrare gli elementi ToDo dal utente attualmente connesso:

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}) 

Ciò blocca la visualizzazione a solo utenti autenticati, e filtraggio per l'utente collegato dalla richiesta , un altro utente, anche se connesso, non può accedere ai record ToDo di un altro utente. Spero che ciò ti aiuti.

+0

Ciao, grazie dell'esempio, questo è il modo in cui ci si sente bene, andrò con questo metodo, ho appena scritto un esempio di app todo e questo funziona bene. – Richard

+0

Fantastico. Sono contento di essere stato in grado di aiutare. – Brandon

1

Rendere come www.domain.com/nomeutente/todo è un modo per implementarlo, ma non garantisce la sicurezza.

Cosa si deve fare mantenere le informazioni di login per l'utente in un i dati della sessione dopo accesso utente, e ogni volta che si verifica certa visione,

  1. verifica se quel particolare utente ha diritto di vedere questo punto di vista.
  2. utilizzando le informazioni di accesso dell'utente (ID o nome utente) quando si esegue una query sull'elenco Todo dell'utente.

E credo che questo collegamento ti aiuterà a fare il tuo lavoro.

Sessions, Users, and Registration.

+0

Non è necessario utilizzare esplicitamente le informazioni di sessione. Il modo standard di Django è solo filtrante con request.user –

+0

Bene. Volevo solo mostrargli un modo più semplice. per fare il lavoro :) Ma grazie! –

+0

Solo una FYI, request.user è impostata dal framework di sessione. È semplicemente inusuale dover utilizzare direttamente la struttura della sessione.Non ho mai dovuto usare il framework di sessione (anche se ha i suoi posti). –

Problemi correlati