Несколько отдельных пользователей в одной базе данных - PullRequest
1 голос
/ 29 сентября 2010

У меня есть база данных .sql, с которой я взаимодействую, используя Django. База данных в начале заполнена общедоступными данными, к которым можно получить доступ из любого источника. Несколько отдельных пользователей могут добавлять строки в таблицу (личные данные). Как пользователь может видеть только те изменения, которые он внес в базу данных (личные данные)?

Ответы [ 2 ]

2 голосов
/ 29 сентября 2010

Я предполагаю, что вы используете django.contrib.auth. Вам просто нужно сделать что-то вроде:

from django.contrib.auth.models import User

# ...

class PrivateData(models.Model):
    # ... private data fields ...
    user = models.ForeignKey(User)

Тогда вы можете получить только поля этого пользователя с помощью:

PrivateData.objects.filter(user=request.user)

РЕДАКТИРОВАТЬ: Итак, если ваши пользователи просто IP-адреса, и вы не используете механизм входа в систему, вам действительно не нужно django.contrib.auth ... хотя в любом случае это хорошо, так как вы можете использовать его для аутентификации себя и используйте встроенный админ для управления вашим сайтом.

Если вы просто хотите связать данные с IP-адресами, настройте модель IPUser:

class IPUser(models.Model):
    address = models.CharField(max_length=64, unique=True) # Big enough for IPv6
    # Add whatever other discrete (not list) data you want to store with this address.

class PrivateData(models.Model):
    # ... private data fields ...
    user = models.ForeignKey(IPUser)

Функция просмотра выглядит примерно так:

def the_view(request):
    remoteAddr = request.META['REMOTE_ADDR']
    try:
        theUser = IPUser.objects.get(address=remoteAddr)
    except IPUser.DoesNotExist:
        theUser = IPUser.objects.create(address=remoteAddr)
    userModifiedData = PrivateData.objects.filter(user=theUser)

Следует отметить одну вещь: когда вы тестируете это с помощью manage.py runserver, вам нужно будет указать IP-адрес с помощью переменной среды:

$ REMOTE_ADDR=127.0.0.1 manage.py runserver

Когда вы используете Django с реальным веб-сервером, таким как Apache, сервер установит переменную для вас.

Возможно, есть несколько способов оптимизировать это, но это должно помочь вам начать.

0 голосов
/ 29 сентября 2010

Я предполагаю, что пользователи должны войти в это приложение. Если да, добавьте столбец в каждую таблицу для имени пользователя. Добавьте WHERE username = ? к каждому запросу, чтобы они могли видеть только свои данные.

Для запросов на обработку данных убедитесь, что имя пользователя соответствует значению для каждой строки; запретить операцию, если не соответствует действительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...