Pycharm上Django的使用 Day12 原

讓用戶擁有自己的數據

用戶應該有屬於自己特定的數據,並且不能訪問其他用戶的數據

1.使用@login_required限制訪問

使用裝飾器@login_required可以對於某些頁面,只允許已登陸的用戶訪問它們

1>限制對topics頁面的訪問

導入函數login_required()用於檢查用戶是否已經登陸,僅當用戶已登陸時,Django才運行topics()的代碼,如果用戶未登錄,就重定向到登陸界面

爲實現這種重定向,需要修改settings.py,讓Django知道到哪裏去查找登錄頁面:

2>全面限制對web_app的訪問

圖片太大就不截了,這步的操作就是在視圖文件views.py中的每一個視圖函數前面加上裝飾器@login_required,達到對未登錄的用戶對其限制訪問的作用

 

2.將數據關聯到用戶

1>修改模型Topic

首先導入了django.contrib.auth中的模型User,然後在Topic中添加了字段owner,它建立到模型User的外鍵關係

2>確定當前有哪些用戶,並遷移數據庫

遷移數據庫時,Django將對數據庫進行修改,使其能夠存儲主題和用戶之間的關聯。爲執行遷移,Django需要知道將各個既有主題關聯到哪個用戶。最簡單的方法是,將既有主題都關聯到同一個用戶,例如超級用戶,爲此,我們需要知道該用戶的ID。

啓動Django shell

遷移數據庫

在紅線處輸入1表示將所有既有主題都關聯管理用戶Degelzhao。這裏並非必須使用超級用戶,而可使用已創建的任何用戶的ID

3>驗證遷移

現在每個主題都屬於Degelzhao的

 

3.只允許用戶訪問自己的主題

當前,不管以哪個用戶的身份登錄,都能夠看到所有的主題,現在,我們做一下修改,只向用戶顯示屬於自己的主題

在views.py中,對函數topics()做如下修改

用戶登錄後,request對象將有一個user屬性,這個屬性存儲了有關該用戶的信息。紅線處表示讓Django只從數據庫中獲取owner屬性爲當前用戶的Topic對象

 

4.保護用戶的主題

我們現在還沒有限制對顯示單個主題的頁面訪問,因此任何已登錄的用戶都可輸入其他用戶所擁有特定主題的URL,來訪問相應主題的頁面

接下來,我們將修改函數topic()來消除這種問題

服務器上沒有請求的資源時,標準的做法是返回404響應。我們導入了異常Http404,並在用戶請求它不能查看的主題時引發這個異常

 

5.保護頁面edit_entry

類似於保護用戶的主題,禁止用戶通過輸入類似於前面的URL來訪問其他用戶的條目

 

6.保護頁面new_entry

當前的狀況是一個用戶可在另一個用戶的web_app中添加條目,接下來我們來解決這個問題

 

7.將新主題關聯到當前用戶

當前,當你添加新主題後,會出現如下錯誤消息,指出web_app_topic.owner_id不能爲NULL。意思就是創建新主題時,必須指定其owner字段的值

根據這個問題,接下來,我們來修改函數new_topic()

1處表示調用form.save(),並傳遞實參commit=False,如果指定了該實參,那麼save方法不會理解將表單數據存儲到數據庫,而是給你返回一個當前對象。這時你可以添加表單以外的額外數據,再一起存儲

2處表示將新主題的owner屬性設置爲當前用戶

3處表示對剛定義的主題實例進行存儲

 

ps:網頁操作就不一一列舉了哈,大家可以根據我的教程到這一步了自己試下~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章