跳转到主要内容

中间件和装饰器,用于将用户导向您的移动网站。

项目描述

这是什么?

这个库是一组中间件和装饰器,有助于创建移动视图并将用户导向网站的移动版本。它做出以下假设

  • 您可以使用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',
)

如何选择移动网站

  1. HTTP_USER_AGENT与MOBILE_USER_AGENTS匹配,且MOBILE_COOKIE未设置为off。

  2. 或者,MOBILE_COOKIE设置为on。

  3. 当前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 (5.9 kB 查看哈希)

上传时间

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面