我正在尋找禁止在Django中爲某些URL自動創建會話。我有/ api/*,每個客戶端都會得到一個新的Django會話。有沒有辦法忽略某些網址?在Django中禁用會話創建
17
A
回答
16
一個平凡的解決方案,這是有API調用和定期調用之間你的網絡服務器區分開來,然後讓你的應用程序的兩個不同的WSGI實例:一個會議啓用,其他禁用會議。 (這可能是與Nginx的比Apache的要容易得多。)
另一種方法是繼承SessionMiddleware然後編輯處理功能忽略符合標準的所有要求。喜歡的東西:
from django.contrib.sessions.middleware import SessionMiddleware
class MySessionMiddleware(SessionMiddleware):
def process_request(self, request):
if request.path_info[0:5] == '/api/':
return
super(MySessionMiddleware, self).process_request(request)
def process_response(self, request, response):
if request.path_info[0:5] == '/api/':
return response
return super(MySessionMiddleware, self).process_response(request, response)
並修改設置的文件,這樣MIDDLEWARE_CLASSES包含路徑「MySessionMiddleware」,而不是「django.contrib.sessions.middleware.SessionMiddleware」。
3
我upvoted接受的答案,但請注意,您還可以使用decorator_from_middleware方法在每個視圖基礎上選擇性地啓用中間件。有關更多詳細信息,請參閱StackOverflow對Non-global middleware in Django的回答。
0
在調用方法的SessionMiddleware中處理響應之前,在自定義中間件或其他任何地方也可以重寫request.session.save
方法。
request.session.save = lambda: None
瑣碎,確實有效。
這種方法的好處,儘管它事實上的一個黑客,是會話對象仍然可以訪問,並且可以使用通常的方式,而不需要在代碼中的任何進一步的修改。
相關問題
- 1. 在Django中創建會話
- 2. 創建Django會話
- 3. Django創建會話
- 4. 創建匿名django會話
- 5. Node.js Express禁用自動會話創建
- 6. 如何禁用在「_private/session」目錄中創建會話文件?
- 7. 創建會話時在Grails中創建會話變量
- 8. 在C#中創建會話#
- 9. 如何在django中獲取在php中創建的會話?
- 10. 創建Django的會話令牌從
- 11. 在Django中使用會話
- 12. 在MonoDroid中創建用戶會話
- 13. 使用jquery在java中創建會話
- 14. 創建會話
- 15. 創建會話
- 16. 禁用會話
- 17. 如何在django中創建我自己的會話表
- 18. 在django/selenium中創建預認證會話Web測試
- 19. 在Django中爲選定頁面禁用會話/ Cookie
- 20. 如何爲所有使用Tiles的JSP禁用會話創建?
- 21. 用會話php創建cookie?
- 22. 會話創建在WCF
- 23. 創建Web會話
- 24. REST - 創建會話
- 25. 在ajax調用之前創建會話
- 26. Php不在webmatrix中創建會話
- 27. 避免在Spring中創建會話
- 28. 如何在ZF2中創建會話
- 29. 在jquery mobile中創建會話變量
- 30. 在liferay中創建Domino會話
感謝您的信息。 1警告雖然。如果您使用的是django身份驗證,則需要會話中間件。另外process_response需要返回響應。 – 2010-11-18 18:57:06
這看起來像我所需要的。一個提示:使用'如果reqest.path_info.startswith('/ api /')'而不是切分字符串。 – 2011-09-06 10:10:58
process_response不應該返回響應對象嗎? DEF process_response(個體,請求,響應): 如果request.path_info [0:5] == '/ API /': 返回響應 返回超級(MySessionMiddleware,自我).process_response(請求,響應) – 2011-10-27 20:42:08