讓用戶擁有本身的數據web
用戶應該有屬於本身特定的數據,而且不能訪問其餘用戶的數據shell
1.使用@login_required限制訪問數據庫
使用裝飾器@login_required能夠對於某些頁面,只容許已登錄的用戶訪問它們django
1>限制對topics頁面的訪問服務器
導入函數login_required()用於檢查用戶是否已經登錄,僅當用戶已登錄時,Django才運行topics()的代碼,若是用戶未登陸,就重定向到登錄界面app
爲實現這種重定向,須要修改settings.py,讓Django知道到哪裏去查找登陸頁面:函數
2>全面限制對web_app的訪問ui
圖片太大就不截了,這步的操做就是在視圖文件views.py中的每個視圖函數前面加上裝飾器@login_required,達到對未登陸的用戶對其限制訪問的做用3d
2.將數據關聯到用戶orm
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:網頁操做就不一一列舉了哈,你們能夠根據個人教程到這一步了本身試下~