检测移动浏览器并为其提供不同的模板风格。

django-mobile-threadsafe的Python项目详细描述


====
django mobile threadsafe
====


请注意!:
这是原始*django mobile*包的线程安全版本。如果您不能保证**python**请求处理的一部分由一个线程提供服务,请使用它。或者如果你喜欢这个包的**明确性**。apache不是线程安全的,但您可以将其配置为使用一个线程进行处理,原始的*django mobile*的问题将得到解决。

::django mobile thread safe和django mobile之间的区别
1。它只包含"templateresponse"响应。语法实际上与通常的"render-to-response"相同,但可能有人不喜欢它。如果要呈现其他模板,应为移动版本注册单独的包含标记。
3.您应该在templatetags中显式声明模板名称。例如,django mobile使用`{%extends base.html%}`,django mobile threadsafe使用`{%extends mobile/base.html%}``,这将扩展相同的mobile/base.html模板。
4。是的,这是线程安全的。



这和原来的包是一样的,原来的包也有同样的管理方式。我之所以这么说,是因为它会影响到您的视图,其余的工作将在单独的模板目录中进行。





。_简介:

**django mobile threadsafe**提供了一种简单的方法来检测移动浏览器,并提供
您手头的工具来呈现一些不同的模板,以便向用户提供您站点的移动版本。

这样做的目的是对视图进行细微的更改,但要透明地交换用于呈现响应的模板。这分为两个步骤:


1。请求中间件决定客户端查看站点的首选项。例如,如果
他想使用移动风格或完整的桌面风格。
2."template response"中间件会根据中间件中检测到的味道选择正确的模板。

**django mobile threadsafe**需要您的视图返回"templateresponse"对象,而不是通常的"httpresponse"或"shortcut"render到responSE’。很容易更改您的视图以使用它们:

c=request context(request,some_dictionary_as_context)
return httpresponse(t.render(c))

or::

return render_to_response(template_name,some_dictionary_as_context,context_instance=request context(request))

但是饼干呢?!没有响应对象我无法设置它们!*
-一切都在控制之中。它们由"request.cookies"to"u save.add(cookies_dictionary,path='/')``方法提供,该方法与django mobile具有相同的中间件。


_安装:

*先决条件:"`django_mobile`"的默认实现取决于django的会话框架。因此,在尝试使用"django_mobile"之前,请确保会话框架已启用并正常工作。

1。确保"django mobile"将使用的所有视图返回在"django.template.response"中声明的"templateresponse"类的对象。
2。使用您喜爱的python工具安装"django mobile",例如使用
"easy\u install django mobile threadsafe"或"pip install django mobile threadsafe"。
3.将"django-mobile.session.session middleware"添加到
"中间件类"设置中。确保它在`` sessionmiddleware``之后被列出。



阅读下面的
工作原理,以及可以调整哪些设置来修改**django mobile**的
behAviour.



用法
=


…_口味:

**django mobile**的概念是围绕您网站的不同口味的理念而构建的。例如,*mobile*版本被描述为
一种可能的*风格*,桌面版本被描述为另一种。

这使得提供许多可能的设计成为可能,而不仅仅是
区分完整的桌面体验和一种移动版本。
您可以提供多种移动风格,例如,一种用于iPhone和Android上的移动Safari,另一种用于Opera,另一种用于iPad等平板电脑上的移动Safari。

*注意:*默认情况下,**Django Mobile**只区分*完整*和
*移动*风格。

*请求*对象可以通过分配给"味道"字段的**djangomobile**类的h实例。您可以在视图中使用它来提供单独的逻辑。在python视图中使用request.flavor.**is_mobile**,request.flavor.**is_default**或request.flavor.**get**等方法非常有用。首先返回布尔值,最后返回一个字符串,即味道的名称。

所选模板将在实际要呈现的模板名称前面加上当前味道的前缀
。这意味着,当使用*mobile*flavor调用
`` template response('index.html',…)``时,
将实际返回使用
`` mobile/index.html`模板呈现的响应。但是如果这个风格化的模板不可用,那么只有在使用HttpResponse对象而不是TemplateResponse呈现该模板时,它才会优雅地退回到默认的"index.html"模板。在下一个版本中,我将尝试使templateresponse对象以相同的方式工作。


当调用您自己的视图时,通常已经在中间件中选择了正确的味道。在某些情况下,您希望
在您的视图或其他地方更改当前使用的味道。您可以通过简单地调用"django_mobile.set_flavor(flavor)",来执行此操作。第一个论点是自我解释。但请记住,您只能传递一种您也处于"味道"设置中的味道。否则,"set-flavor"将引发"valueerror"。可选的
``permanent``参数定义是否记住同一客户端的
未来请求的味道变化。


他们只需要在对站点的请求中指定
"flavor"get参数。这将永久地
选择此味道作为他们查看网站的首选项。

风味=完整">;获得完整体验<;/a>;
<;li>;<;a href="?flavor=mobile">;查看我们的移动版本<;/a>;
<;li>;<;a href="?flavor=ipad">;查看我们的ipad版本<;/a>;
<;/ul>;




……_缓存:

django提供了一些方便的方法来轻松缓存您的视图。
其中一个是"django.views.decorators.cache.cache_page"。与**django mobile**一起缓存整个页面的问题是,django的
缓存系统不知道味道。这意味着,如果对一个页面的第一个请求
带有移动风格,第二个请求也可能
从缓存中获取带有移动风格的页面——即使
第二个请求是由桌面浏览器请求的。

**django mobile**也附带了自己的"缓存页面"实现来解决这个问题问题。PL轻松使用"django mobile.cache.cache_page"而不是django自己的"cache_page"装饰器的


您还可以使用django的缓存中间件
"django.middleware.cache.updatecachemiddleware"和
"fetchfromcachemidleware"。但是要让他们知道
的味道,您需要在"中间件类"设置中的第二个最后一项添加
``django-mobile.cache.middleware.cacheflavourmiddleware``作为
第二个项目,就在
``fetchfromcachemidleware``之前。



_定制:

django mobile**的行为可以通过一些点进行定制。这里列出了一些可能性:



设置
---


…_设置:


这里是一个由**django mobile**使用的设置列表,可以在您自己的"settings.py````:


flavours
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/>
如果内置的MobileDetectionMiddleware检测到移动浏览器,则选择此项。

**默认值:**``Mobile`


如果您有许多风格,并且希望
将它们存储在一个公共子目录中,这将非常有用。

**默认值:*````````(空字符串)



风格获取参数
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

用户可以使用http get参数更改要查看的风格。
这决定了此参数的名称。将其设置为"none"以禁用。

**默认值:*``` flavor``



static_url_mobile
^^^^^^^^^^^^^^^^^^^^^^^^

这是一个很好的做法,使用你的模板,但不是必要的。如果你喜欢Desctop版本的话,也可以在移动版本中使用它。

**默认值:*```'/media/mobile/'```



此设置确定使用哪个会话密钥保存此
信息。

**默认值:*```味道'``



这不是您直接想要的吗?
==


*django mobile threadsafe*作为astract工厂实现,django_mobile.middleware作为creater,django_mobile.djangomobile作为产品。现在它只有一个实现,这是在django_mobile.session中。你总是可以自己写。




changlog
==


>0.3
---


*内部实现变得线程安全,使用变得更加明确。

<0.2.3
----

*fix:set*flavor*在所有情况下,不仅是在检测到移动浏览器的情况下。
感谢John P.Kiffmeyer的报告。


<0.2.2
----

*修复:Android上的Opera Mobile被归类为移动浏览器。感谢
dgerzo提供的报告。
*嗅探ipad,使其不被视为小型移动设备。
感谢ryan showalter提供的修补程序。

0.2.1
----


*修复了不包括django-mobile.cache包的打包问题。
感谢*scott turnbull*提供的报告。

0.2.0
----

*重新调整了项目布局,以从顶级目录中删除settings.py和manage.py。这解决了使用pip的-e选项安装
时的模块名冲突。感谢*bendavis78*提供的报告。

*添加了一个"cache-page"装饰器,它模拟了django的"cache-page",但
考虑了味道。否则,缓存系统将缓存发生缓存未命中时当前处于活动状态的
味道。感谢
*itmustbejj*的报告。

*Akes Django的缓存中间件
了解味道。我们在内部使用"vary"响应头和"x-flavor"请求头。


0.1.4
----


*修正了模板加载程序中只实现了"加载模板源"而没有"加载模板"的问题。感谢tylanpince,
rwilcox和frédéric roland的报告。


0.1.3
----


*修复了"runserver"命令的问题,该命令没有处理彼此独立的所有请求。感谢bclermont和frédéric roland的
报告。

<0.1.2
----

*修复了"setflavourmiddleware"中的未引用变量错误。


0.1.1
----

*修复的"是可用于"django mobile.loader.loader"的"属性。感谢Michela Ledwidge的报告。

<0.1.0
----

*初次发布。

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

推荐PyPI第三方库


热门话题
java根据选择随机设置图标   java如何将Android Studio与本地服务器数据库SQL server 2008连接?   java在点击鼠标后绘制一个椭圆形   java选项窗格相对于其父项的位置   java如何在Android中的switch case中使用String[]输入?   安卓无法从“15.0.1”确定java版本   如果满足特定条件,java是否重置计时器?   java是一个实体类,可以在OOAD中返回其他实体实例吗?   bash将对jar文件| cut | awk和java程序的调用集成到一个统一进程中   Spring安全更新身份验证成功时的最后登录日期   数据库身份验证中基于Java控制台的客户端服务器登录应用程序错误   java Selenium junit测试失败,驱动程序过早获取URL   java LibGdx多点触摸事件混淆   带扫描仪的java打印空间   来自旧版应用程序的java springcloudsleuth头   java如何实现模板设计模式?   java如何比较具有多个值的键的两个映射?   读取时R中的java MemoryError。xlsx