我已经开始尝试在我正在处理的网站上实施用户。 也许这不是一个好方法,因为我是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中实现的,我可以实现的,或者我需要使用&#34; access&#34;来制作我自己的用户表。一个id用于他们可以看到的内容的列,而不是使用用户名?
答案 0 :(得分:3)
理想情况下,您希望将此类逻辑保留在模板之外。计算视图中的下载URL,并将其传递给模板。然后您的模板简化为:
{% 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模板语言,你会发现更容易理解逻辑。
答案 1 :(得分:1)
如果用户要更改姓名(即结婚/离婚/时髦),您的方法会很快失败,最好是在下载模型和用户之间提供多对多关系,然后您可以在模板中迭代这些内容以检索特定用户可用的所有下载。