2012-05-14 4 views
5

Я пытаюсь тренироваться как/лучший, самый безопасный способ хранить данные пользователя отдельно на сайте django, который мне нужно написать.django: сохранить данные каждого пользователя отдельно

Вот пример того, что мне нужно сделать ...

пример приложения ToDoList

Использование Джанго contrib.auth для управления пользователями/пароли и т.д., у меня будет следующим пользователям

том джим подветренной

там будет модель ToDo (в моем реальном приложении появятся дополнительные модели)

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

Вопрос, который я имею - и может быть более думать, что это: Как бы это быть заблокирован так том может видеть только список задач Тома, Ли можно увидеть только список задач и так далее ...

Я видел несколько сообщений о том, что вы можете использовать фильтр в каждом запросе или использовать URL-адреса, чтобы URL мог выглядеть как www.domain.com/username/todo

Но в любом случае я не уверен, правильный путь/наилучший способ, или бонкерс с точки зрения остановки пользователей, видящих друг друга данных

ура

Ричард

ответ

8

Один подход заключается в фильтрации элементов ToDo от текущего зарегистрированного пользователя:

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

Это блокирует мнение для авторизированных пользователей, а также фильтрацию по вошедшему пользователю из запроса , другой пользователь, даже при входе в систему, не может получить доступ к записям ToDo другого пользователя. Надеюсь, что это поможет тебе.

+0

Привет, спасибо, пример, это то, как я себя чувствую, я пойду с этим методом, просто написал пример приложения todo, и это хорошо работает. – Richard

+0

Awesome. Рад, что я смог помочь. – Brandon

1

Сделать URL как www.domain.com/username/todo - это один из способов его реализации, но он не гарантирует безопасность.

Что вы должны сделать держать регистрационную информацию вашего пользователя в сеансе данных после входа пользователя в систему, и каждый раз, когда вы проверяете определенный вид, имеет

  1. проверка того, что конкретный пользователь право видеть эту точку зрения.
  2. с использованием информации о пользователе (ID или имя пользователя) при запросе списка пользователей Todo.

И я предполагаю, что эта ссылка поможет вам выполнить свою работу.

Sessions, Users, and Registration.

+0

Не нужно явно использовать информацию сеанса. Стандартный способ django просто фильтруется с помощью request.user –

+0

Ну. Я просто хотел показать, что это более простой способ. делать работу :) Но спасибо! –

+0

Просто FYI, request.user задается средой сеанса. Просто необычно использовать структуру сеанса напрямую.Мне не раз приходилось использовать рамки сеанса (хотя у нее есть свои места). –

Смежные вопросы