21. django關閉瀏覽器,怎樣清除 cookies 和 session?
設置Cookie
1. def cookie_set(request):
2. response = HttpResponse("<h1>設置Cookie,請查看響應報文頭</h1>")
3. response.set_cookie('h1', 'hello django')
4. return response
讀取Cookie
1. def cookie_get(request):
2. response = HttpResponse("讀取Cookie,數據如下:<br>")
3. if request.COOKIES.has_key('h1'):
4. response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
5. return response
以鍵值對的格式寫會話。
1. request.session['鍵']=值
根據鍵讀取值。
1. request.session.get('鍵',默認值)
清除所有會話,在存儲中刪除值部分。
1. request.session.clear()
清除會話數據,在存儲中刪除會話的整條數據。
1. request.session.flush()
刪除會話中的指定鍵及值,在存儲中只刪除某個鍵及對應的值。
1. del request.session['鍵']
設置會話的超時時間,如果沒有指定過期時間則兩個星期后過期。
如果value是一個整數,會話將在value秒沒有活動后過期。
如果value為0,那么用戶會話的Cookie將在用戶的瀏覽器關閉時過期。
如果value為None,那么會話在兩周后過期。
1. request.session.set_expiry(value)
Session 依賴於 Cookie,如果瀏覽器不能保存 cookie 那么 session 就失效了。因為它需要瀏覽器的 cookie 值去 session 里做對比。session就是用來在服務器端保存用戶的會話狀態。
cookie 可以有過期時間,這樣瀏覽器就知道什么時候可以刪除 cookie了。 如果 cookie 沒有設置過期時間,當用戶關閉瀏覽器的時候,cookie 就自動過期了。你可以改變 SESSION_EXPIRE_AT_BROWSER_CLOSE 的設置來控制session 框架的這一行為。缺省情況下, SESSION_EXPIRE_AT_BROWSER_CLOSE設置為 False ,這樣,會話 cookie 可以在用戶瀏覽器中保持有效達SESSION_COOKIE_AGE 秒(缺省設置是兩周,即 1,209,600 秒)如果你不想用戶每次打開瀏覽器都必須重新登陸的話,用這個參數來幫你。如果SESSION_EXPIRE_AT_BROWSER_CLOSE
設置為 True,當瀏覽器關閉時,Django 會使 cookie 失效。
SESSION_COOKIE_AGE:設置 cookie 在瀏覽器中存活的時間。
22. 有用過Django REST framework 嗎?
面試就喜歡面試官問這種問題,前面就已經說過了,這種問題一提出來,我們內心是高興的一筆的,正好將我們學的Django restframework源碼帶面試官走一波,之后可以再補充一點Django的其他源碼,比如ORM源碼,settings源碼,
admin源碼...最后一定要記住,你要展示出你不僅閱讀過源碼還基於源碼在自己的實際項目中參考借鑒過。如果把面試比作考試題滿分100的話,這一題就是送分的30分大題!!!
23. Celery分布式任務隊列?
情景:用戶發起request,並等待response返回。在本些views中,可能需要執行一段耗時的程序,那么用戶就會等待很長時間,造成不好的用戶體驗,比如發送郵件、手機驗證碼等。 使用celery后,情況就不一樣了。解決:將耗時的程序放到celery中執行。將多個耗時的任務添加到隊列queue中,也就是用redis實現broker中間人,然后用多個worker去監聽隊列 里的任務去執行。

- 任務task:就是一個Python函數。
- 隊列queue:將需要執行的任務加入到隊列中。
- 工人worker:在一個新進程中,負責執行隊列中的任務。
- 代理人broker:負責調度,在布置環境中使用redis。
正向代理:請求經過代理服務器從局域網發出,然后到達互聯網上的服務器。
特點:服務端並不知道真正的客戶端是誰。
反向代理:請求從互聯網發出,先進入代理服務器,再轉發給局域網內的服務器。
特點:客戶端並不知道真正的服務端是誰。
區別:正向代理的對象是客戶端。反向代理的對象是服務端。
24. 簡述Django下的(內建的)緩存機制?
Django提供6種緩存方式:
開發調試
內存
文件
數據庫
Memcache緩存(python-memcached模塊)
Memcache緩存(pylibmc模塊)
除此之外還可使用redis緩存
由於Django是動態網站,所有每次請求均會去數據進行相應的操作,當程序訪問量大時,耗時必然會更加明顯,
最簡單解決方式是使用:緩存,緩存將一個某個views的返回值保存至內存或者memcache中,5分鍾內(默認配置)再有人來訪問時,
則不再去執行view中的操作,而是直接從內存或者Redis中之前緩存的內容拿到,並返回。
這里可以向面試官介紹一下前面提到的Django中間件配合緩存協同工作的機制
25. 對cookie與session的了解?他們能單獨用嗎?
首先需要搞清楚的是session是存儲在服務器上的,cookie是存儲在客戶端瀏覽器上的兩者是相輔相成的用戶首次訪問服務器,服務器會為每個用戶單獨創建一個session對象(HttpSession),
並為每個session分配唯一一個id(sessionId),sessionId通過cookie保存到用戶端,當用戶再次訪問服務器時,需將對應的sessionId攜帶給服務器,服務器通過這個唯一sessionId就可以找到用戶對應的session對象,從而達到管理用戶狀態
