一个数据库上有多个用户

时间:2010-09-28 23:07:06

标签: mysql django

我有一个.sql数据库,我使用Django进行交互。 开头的数据库充满了可以从任何人访问的公共数据。 多个用户可以将行添加到表中(私有数据)。 用户如何只能看到他在数据库中所做的更改(私有数据)?

2 个答案:

答案 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 = ?添加到每个查询中,以便他们只能看到他们的数据。

对于数据操作请求,请确保用户名与每行的值匹配;如果不是真的,禁止操作。