用于将用户定向到移动站点的中间件和装饰器。
django-mobilit的Python项目详细描述
这是什么?
这个库是帮助创建 移动视图并将用户定向到站点的移动版本。它使 这些假设:
- You can use Vary: User-Agent to serve mobile and non-mobile content through the same URLs.
- You want to use separate views and/or templates for the mobile site. If you’re building a mobile experience through media queries this library won’t be helpful.
- Not all views from the normal site need to be replaced with mobile views.
支架
使用Python2.6在Django Trunk上编写和测试。
设置
这些是默认设置:
# A regex for detecting mobile user agents. MOBILE_USER_AGENTS = 'android|fennec|iemobile|iphone|opera (?:mini|mobi)' # The name of the cookie to set if the user prefers the mobile site. MOBILE_COOKIE = 'mobile'
您需要这些中间件(但请参见下面的用户代理注意事项):
MIDDLEWARE_CLASSES = ( 'mobile.middleware.DetectMobileMiddleware', 'mobile.middleware.XMobileMiddleware', )
如何选择移动网站
- HTTP_USER_AGENT与MOBILE_USER_AGENTS和 MOBILE_COOKIE未设置为off。
- 或将MOBILE_COOKIE设置为on。
- 存在当前URL的移动视图。
根据中的正则表达式检查HTTP_USER_AGENT。 MOBILE_USER_AGENTS。默认设置是一组非常基本的用户代理 因为cookie提供了一个回退。
如果MOBILE_COOKIE设置为on,则通过Set-Cookie或通过 javascript,无论用户代理如何,都将选择移动站点。如果 MOBILE_COOKIE设置为off将始终选择普通站点。
对request对象的更改
如果当前请求是针对移动站点,request.MOBILE = True。在 所有其他时间request.MOBILE = False。
装饰工
提供了一些装饰程序来帮助使用常见的习惯用法:
@mobile_template('app/{mobile/}detail.html') def view(request, template=None): ...
@mobile_template有助于使用相同的视图代码和 模板上下文,但切换到另一个移动模板。接下来是 这个逻辑:
template = 'app/mobile/detail.html' if request.MOBILE else 'app/detail.html'
要在移动视图中使用完全不同的功能:
def view(request): ... @mobilized(view) def view(request): ...
在本例中,view的第一个定义将用于 站点和第二个功能将用于移动站点。正常人和 mobile site指向urls.py中的同一视图,而decorator句柄 选择要运行的视图。
在用户代理上变化
由于移动用户可以从任何正常的url进入站点,因此 DetectMobileMiddleware总是检查User-Agent是否 匹配MOBILE_USER_AGENTS中的内容,并可能将浏览器重定向到 移动站点。因此,站点上的每个url都应该发送Vary: User-Agent,以获得正确的http缓存。用户代理上的变量可以是 不利于前端缓存方案,因此建议您移动 移动检测到堆栈上的前端代理。
代理可以在DetectMobileMiddleware中运行逻辑并设置 HTTP_X_MOBILE(因此我们知道是否为移动视图提供服务)而不改变 在用户代理内部。相反,当 正在将Vary: User-Agent发送回客户端。从外面看来 应用程序在User-Agent上有所不同,但代理只需要缓存 URL的移动和非移动版本。