我正在寻找禁止在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. 如何禁用在“_private/session”目录中创建会话文件?
- 4. 在C#中创建会话#
- 5. 如何在django中获取在php中创建的会话?
- 6. 创建Django的会话令牌从
- 7. 在Django中使用会话
- 8. 创建会话
- 9. 禁用会话
- 10. 在django/selenium中创建预认证会话Web测试
- 11. 如何在django中创建我自己的会话表
- 12. 在Django中为选定页面禁用会话/ Cookie
- 13. 如何为所有使用Tiles的JSP禁用会话创建?
- 14. 用会话php创建cookie?
- 15. 会话创建在WCF
- 16. 创建Web会话
- 17. REST - 创建会话
- 18. 在ajax调用之前创建会话
- 19. 如何在ZF2中创建会话
- 20. 在C#中创建远程PowerShell会话?
- 21. 如何在angualr2中创建新会话
- 22. 在JSP中创建会话标识?
- 23. Php不在webmatrix中创建会话
- 24. 如何在Catalyst中创建会话?
- 25. 如何在Swift中创建QuickBlox会话
- 26. 如何在web2py中创建Auth会话?
- 27. 如何在Spring Junit中创建会话
- 28. 在C#webservice中创建会话
- 29. 会话如何在JSP中创建?
- 30. 如何创建会话并在会话中设置UserBean
感谢您的信息。 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