中间件和装饰器,用于将用户导向您的移动网站。
项目描述
这是什么?
这个库是一组中间件和装饰器,有助于创建移动视图并将用户导向网站的移动版本。它做出以下假设
您可以使用Vary: User-Agent通过相同的URL提供移动和非移动内容。
您希望为移动网站使用单独的视图和/或模板。如果您通过媒体查询构建移动体验,则此库不会很有用。
不是所有来自正常网站的视图都需要替换为移动视图。
支持
使用Django trunk和Python 2.6编写和测试。
设置
以下是默认设置
# 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的定义将用于正常站点,第二个函数将用于移动站点。正常站点和移动站点的URL在urls.py中指向相同的视图,装饰器负责选择要运行哪个视图。
基于用户代理
由于移动用户可以从任何正常URL进入网站,因此DetectMobileMiddleware总是检查User-Agent是否与MOBILE_USER_AGENTS中的某项匹配,并可能将浏览器重定向到移动站点。因此,网站上每个URL都应该发送Vary: User-Agent以获得适当的HTTP缓存。基于用户代理的Vary可能会损害您的前端缓存方案,因此建议您将移动检测移动到堆栈的前端代理。
代理可以在不内部基于用户代理的情况下运行DetectMobileMiddleware中的逻辑,并设置HTTP_X_MOBILE(这样我们就知道是否提供移动视图)。相反,它可以在发送Vary: User-Agent回客户端的同时基于X-Mobile。从外部看,应用程序似乎是基于用户代理来变化的,但代理只需要缓存URL的移动和非移动版本。
项目详情
django-mobility-0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b925e1a4f40a93fd81841ef9a7222b7053da46245d2fc8764d53420dcffd014d |
|
MD5 | 4a0cc81f147463a2ca2ce2d9805c625b |
|
BLAKE2b-256 | dbc70ab9aa50f6185b81a14ed07869caf9fff9f76f4ec9d41dc4e0242cb4a3e8 |