2016-04-21 29 views
0

我有一個數據庫表如下。 enter image description hereDjango:顯示DB數據只登錄用戶有多個過濾器

URL顯示DB數據重定向到這個頁面

url(r'^editinvoice/(?P<pk>\d+)/$',views.edit_invoice,name='editinvoice'), 

template.html代碼爲

<a href="{% url "editinvoice" pk=invoices.id %}">{{ invoices.invoice_number }}</a></td> 

invoices.id是DB表上方的外鍵。

鏈接傳遞正確的包並且細節正確顯示。但是,如果我只是更改網址中的ID,即使我不是與用戶相關的信息,我也可以看到信息。 應該做什麼該信息應該可用登錄用戶只有當用戶如果它的擁有者。

回答

1

爲了您的意見方法edit_invoice,使用@login_required裝飾。 在方法中,您將提高403錯誤:

from django.core.exceptions import PermissionDenied 

def edit_invoice(request, pk): 
    invoice = Invoice.objects.get(pk=pk) 
    if invoice.user != request.user: 
     raise PermissionDenied 

查看關於@login_required Django文檔。

另請參閱django doc關於PermissionDenied

編輯:

是啊,有一個 「不存在」 更有意義。最常見的一種是提高404例外,如果用戶正在訪問一個不存在的URL:

從django.http進口HTTP404 提高HTTP404

Django doc about Http404

+0

我正在使用@login_required裝飾器。只有在用戶登錄後才能看到詳細信息。但作爲登錄後的用戶,您也可以看到我的詳細信息。 –

+1

我編輯我的答案。 –

+0

我用權限拒絕,但現在它的工作正常,用戶不能看到其他發票,但如何更改默認的Django錯誤,並提供一個乾淨的消息,如發票不存在? –