2016-03-16 24 views
3

我开始尝试在我正在处理的网站上实现用户。 也许这不是一个好方法,因为我是django的新手;我至今是一个简单的模板检查,以提供不同的链接到不同的人:Django将页面限制为某些用户

{% extends 'base.htm' %} 
{% block content %} 
    {% if user.username == 'user1' %} 
    <p>User 1 Downloads</p> 
    {% elif user.username == 'user2' %} 
    <p>User 2 Downloads</p> 
    {% else %} 
    <p>There are no Downloads for this User</p> 
    {% endif %} 
{% endblock %} 

这是我公司的一个新的网站,我希望有最多可能20个用户,虽然我可以,如果/箱通过他们可能有更好的方法来做到这一点。另外,我希望能够举例说明:user1到user5有权访问下载1,user6到user10有权访问下载2等等。这是否已经在django中说明了我可以实现,还是需要使用带有ID的“访问”列来创建我自己的用户表,以便用于他们可以看到的ID,而不是使用用户名?

+1

在我们的项目中,我们使用了'django.contrib.auth'并将用户分配给了组,以过滤他们被允许看到的内容。 –

+0

把下载放在一个表中,并添加一个'用户'字段到这个表中,这样你就可以得到所有用户的下载== logged_user –

+0

@ChuckLoganLim我已经读过关于组的信息,但是我很难找到如何制作和使用一个组。 –

回答

3

理想情况下,您希望将这种逻辑保留在模板之外。计算视图中的下载网址,并将其传递给模板。然后,您的模板简化为:

{% if download_url %}<a href="{{ download_url }}">Download</a>{% else %}No downloads{% endif %} 

在您的视图中,您可以从if/elif语句开始以确定下载URL。

def get_download_url(self): 
    if user.username == 'user1': 
     download_url = '/downloads/user1/' 
    elif user.username == 'user2': 
     download_url = '/downloads/user2/' 
    else: 
     download_url = None 

如果这变得很复杂,你可以使用字典或数据库表,你不应该更新你的模板。

def get_download_url(user): 
    download_urls = { 
     'user1': '/downloads/user1/', 
     'user2': '/downloads/user2/', 
    } 
    return download_urls.get(user.username) 

最终,您可能希望将信息存储在数据库中。请注意,您不需要自定义用户。您只需要具有外键/一对一/多对多链接到用户的字段的模型。

class Download(models.Model): 
    user = models.OneToOneField('auth.User') # one to one field limits to one download url per user 
    download_url = models.CharField() 

然后在视图:

def get_download_url(user): 
    try: 
     download = Download.objects.get(user=user) 
     return download.download_url 
    except Download.DoesNotExist: 
     return None 

我敢肯定,所有这些片断可以改进或调整,以满足您的使用较好。我的主要观点是,如果使用Python而不是Django模板语言,则会更容易使逻辑更加正确。

+0

有什么可以详细说明我将如何计算下载网址?这似乎是一个更好的方法,并会保持我的html很小。 –

+0

我已经添加了一些建议,以帮助您入门。 – Alasdair

1

如果用户要改变他们的名字(即结婚/离婚/时髦),那么你的方法会很快崩溃,最好是提供一个下载模型和一个多对多的关系用户,那么您可以在模板中迭代这些来检索特定用户可用的所有下载。

相关问题