用于将用户定向到移动站点的中间件和装饰器。

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',
)

如何选择移动网站

  1. HTTP_USER_AGENTMOBILE_USER_AGENTSMOBILE_COOKIE未设置为off
  2. MOBILE_COOKIE设置为on
  3. 存在当前URL的移动视图。

根据中的正则表达式检查HTTP_USER_AGENTMOBILE_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的移动和非移动版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javai是JAXB的新手。如何将两个具有不同名称空间的不同xml合并为一个具有根元素的xml并将其解组?   JDO中的java应该是可传递的DefaultFetchGroup吗   java服务器配置问题   java在理解JList时遇到困难   java何时将RequestContextFilter用于Jersey?   java从数据库中读取文本文件。jar文件   Java正则表达式,仅适用于不包括零的正数   爪哇番石榴。类路径中的jar   JavaEE:关于设计的问题   java GUI,在面板中排列按钮   java Android为什么使用接口被认为是活动和片段之间通信的最佳实践?   java如何获取wicket图像的url以在开放图元标记中使用它   从Java字节[]>Base64>Javascript数组缓冲>Base64>byte[]   java正则表达式帮助字符串JWE766。1.pdf格式摘录766   java Hibernate,JPA忽略@Formula