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

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第三方库


热门话题
在嵌套的json字符串Java中附加双引号   java我应该首先将客户机的流读入字符串,然后解析HTTP,还是在从客户机的流中获取输入的同时解析HTTP?   java方法永远不会到达if语句,尽管它的条件得到了满足   java Spring Cloud Kinesis binder在启用kpl/kcl时创建SpringIntegrationMetadataStore和SpringIntegrationLockRegistry。有必要吗?   为什么打印空字符串时会弹出零?   java Swagger API规范自定义API响应属性usign@ApiPropertyModel   抽象类中受java保护的数据   java将参数作为参数从jsf页面传递给bean,并保存它   java在转换为字符串后丢失HTML转义   Java注释:使用注释更改数据   Java中XML XSD到AVRO avsc的映射   java将TreeView的子项、子项、子项着色   java如何在Springbeans中获取HttpServletRequest?   Java和MySQL如何在涉及外键时设计类