2016-03-16 26 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

如果用戶要改變他們的名字(即結婚/離婚/時髦),那麼你的方法會很快崩潰,最好是提供一個下載模型和一個多對多的關係用戶,那麼您可以在模板中迭代這些來檢索特定用戶可用的所有下載。

相關問題