Я предполагаю, что вы используете 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, сервер установит переменную для вас.
Возможно, есть несколько способов оптимизировать это, но это должно помочь вам начать.