<Chapter 2>2-2-1.用户偏好模式(The User Preferences Pattern)
在这个模块中我们要创建的应用是一个简单的钟。当一个用户访问这个网站时,这个应用会更具服务器的系统时间显示当前的时间。默认情况下,这个应用使用标准国际时间(UTC)时区显示当前时间。用户可以使用Google帐户登录和偏好设定来自定义时区。
这个应用演示了三个App Engine的特性:
・datastore,主要存储数据,一致的,可靠的,可扩展的。
・内存缓存,辅助存储,比datastore要快,但从长远看不一定时持久的。
・Google帐户,使用Google用户帐户系统来验证和识别用户的能力。
Google账户和大多数用户帐户系统一样工作。如果用户没有登录这个时钟应用,她看到一个一般视图带有默认设置(UTC时区)、登录和创建一个新用户的链接。如果这个用户选择去登录或注册,这个应用会引导她到一个由Google帐户管理的登录窗口。登录或创建一个帐户会再引导用户返回到这个应用。
当然,你可以实现你自己的帐户机制而不是使用Google帐户。你也可以利用App Engine中内置的对OpenID的支持来使用一个OpenID提供者(或用户选择的提供者)。使用Google帐户或OpenID有有点也有缺点——主要的有点就是你不需要实现你自己的帐户机制。如果应用的一个用户已经有了一个Google帐户,这个用户使用这个帐户来登录而不需要为你的应用创建一个新用户。
当用户已经登录后,如果访问这个应用,这个应用会加载用户的偏好数据并利用它来提供网页。应用通过两步取回偏好数据。首先,它会从快速辅助存储(内存缓存)中取数据。如果数据在内存缓存中不存在,应用尝试从主存储(datastore)中取回数据,如果成功的话,应用会将它放到内存缓存中为以后的请求查找。
这就意味着对于大多数请求,应用可以从内存缓存中取回用户的偏好,而不需要访问datastore。尽管从database中读数据也是很快的,但是从内存缓存中读会快得多而且避免了datastore的调用成本。每当用户访问一个网页时都要访问相同的数据时,这个差别就很大了。
我们的时钟应用有两个请求处理器。一个处理器显示当前的时间以及登录和退出的链接。当用户已8登录时,它也显示了一个网页表单来调整时区。当时区被提交时,第二个处理器处理时区。当用户提交了偏好表单时,应用保存变更并再引导浏览器返回这个主页面。
应用从它的服务器的系统时间取得当前时间。值得注意的是App Engine不保证应用的所有网络服务器的系统时钟时同步的。因为对于这个应用的两个请求可能会被不同的服务器处理,不同的请求可能看到不同的时钟。服务器时钟作为一个真实应用的时间数据源是不够一致的,但是对于这个例子已经足够了。
在下一个模块中,我们使用Python来实现这个应用。在"Developing a Java App"模块中我们做相同的事情。和之前一样,可以随意跳过不适合你的部分。
<Chapter 2>2-2-1.用户偏好模式(The User Preferences Pattern)的更多相关文章
- Android 保存用户偏好设置
很多情况下都允许用户根据自己的习惯和爱好去设置软件,而我们需要保存这些设置,可以用一个专业保存用户偏好的类:SharedPreferences. 这个类是实现方法其实也就是创建和修改 XML 文件, ...
- [SharePoint 2010]关于基于声明(Claims)的用户认证模式
转:http://blog.csdn.net/zw_2011/article/details/7417132 SharePoint 2010在用户认证模式上,较之以前的版本有了非常大的改变.在Shar ...
- Oracle用户和模式,表空间
oracle 用户与表空间关系 oracle用户与表空间关系用户=商家表=商品表空间=仓库1. 1个商家能有很多商品,1个商品只能属于一个商家2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时 ...
- 【Qt官方例程学习笔记】Application Example(构成界面/QAction/退出时询问保存/用户偏好载入和保存/文本文件的载入和保存/QCommandLineParser解析运行参数)
The Application example shows how to implement a standard GUI application with menus, toolbars, and ...
- Oracle 用户与模式的关系
一.用户登录 Oracle 数据库的安全保护流程分为3个步骤. 1.用户向数据库提供身份识别信息,即提供一个数据库账号 2.证明身份识别信息是否有效,通过密码来实现 3.用户输入的密码经过数据库的核对 ...
- hive单用户多点模式配置
简介 单用户多点模式也称远程服务模式,用户非java客户端访问元数据库,在服务端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库. mysq ...
- centos 单用户登陆模式操作
在centos中因为安装java而配置 jdk环境变量的原因,对/etc/profile文件进行了编辑 错误的环境变量配置导致在第一次修改profile文件并保存后,执行source /etc/pro ...
- Oracle的表空间、用户和模式
Oracle 的 表空间(Tablespace).用户(User).模式(Schema) 前面有整理了一篇 Oracle 数据库(database) 与 实例(instance) 的概念及关系整理 ...
- 目标用户偏好指数Target Group Index分析
目标用户偏好指数Target Group Index分析 TGI指数,全称Target Group Index,可以反映目标群体在特定研究范围内强势或者弱势. TGI指数计算公式 = 目标群体中具有某 ...
随机推荐
- 解决PHP开启gd库无效的问题
最近需要重新安装PHP,以前一直使用的都是XAMPP,基本上都不需要自己配置,现在准备直接下载官方原版的Apache和PHP,自己来慢慢摸索如何继承配置. 我下载的Apache版本为2.2.25,PH ...
- IOS基础框架
GameKit 为游戏提供网络功能:点对点互联和游戏中的语音交流 AddressBook 提供访问用户联系人信息的功能 AddressBookUI 提供一个用户界面,用于显示存储在地址簿中的联系人信息 ...
- Java连接oracle数据库的OCI和THIN
使用jdbc连接上oracle有两种方法: 1. 使用thin连接 由于thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与 ...
- Java 包装类 自动装箱和拆箱
包装类(Wrapper Class) 包装类是针对于原生数据类型的包装. 因为有8个原生数据类型,所以对应有8个包装类. 所有的包装类(8个)都位于java.lang下. Java中的8个包装类分别是 ...
- sdut 1728 编辑距离问题( dp )
题目 思路:edit(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离. 有如下动态规划公式: if i == 0 且 j == 0,edit(i, j) = 0 ...
- HDU 1269 迷宫城堡 (强连通分量,常规)
题意: 判断所给的有向图是否是一个强连通图. 思路: 如果连通分量大于1则必定No,如果强连通分量大于1也是No.tarjan算法求强连通分量. #include <cstdio> #in ...
- Azure SQL 数据库:服务级别与性能问答
ShawnBice 2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...
- fmri降噪,利用spatial+temporal信息
1.基于小波+高斯模型 <SPATIOTEMPORAL DENOISING AND CLUSTERING OF FMRI DATA>
- 01day1
最大音量 动态规划 题意:给出一个初始值和一个变化序列 c,在第 i 步可以加上或减去 c[i],求 n 步之后能达到的最大值.有一个限定值 maxlevel,在变化过程中值不能超过 maxlevel ...
- 【ASP.NET MVC】"[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 ..."的解决办法
1.错误页面: “/”应用程序中的服务器错误. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web ...