我有一个.sql数据库,我使用Django进行交互。 开头的数据库充满了可以从任何人访问的公共数据。 多个用户可以将行添加到表中(私有数据)。 用户如何只能看到他在数据库中所做的更改(私有数据)?
答案 0 :(得分:2)
我假设您正在使用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这样的真实Web服务器时,服务器会为您设置变量。
可能有几种方法可以优化它,但这应该可以让你开始。
答案 1 :(得分:0)
我假设用户必须登录此应用程序。如果是,请为每个表添加一列用于用户名。将WHERE username = ?
添加到每个查询中,以便他们只能看到他们的数据。
对于数据操作请求,请确保用户名与每行的值匹配;如果不是真的,禁止操作。