<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指数计算公式 = 目标群体中具有某 ...
随机推荐
- org.json和json-lib比较
经常会用到JSON格式才处理,尤其是在Http请求的时候,网上可以找到很多json处理的相关工具,如org.json和json-lib,下面两段源代码是分别使用这两个工具解析和构造JSON的演示程序. ...
- maven小项目注册服务(二)--captcha模块
验证码生成模块,配置信息基本和前面的模块一样.account-captcha需要提供的服务是生成随机的验证码主键,然后用户可以使用这个主键要求服务生成一个验证码图片,这个图片对应的值应该是随机的,最后 ...
- Android用户界面布局(layouts)
Android用户界面布局(layouts) 备注:view理解为视图 一个布局定义了用户界面的可视结构,比如activity的UI或是APP widget的UI,我们可以用下面两种方式来声明布局: ...
- poj 1185 炮兵阵地(三维状态压缩dP)
题目:http://poj.org/problem?id=1185 思路: d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量. 1表示放大炮, 地形状态 ...
- VB获取浏览器版本
String userAgent; userAgent = Request.UserAgent; ) { // The browser is Microsoft Internet Explorer V ...
- 【.NET应用技巧】Asp.NET MVC 4 设置IIS下调试
[环境] VS 2012 IIS7.5 [问题] MVC项目在创建时和APS.NET不同,不能够选择服务器类型,不能够直接把项目创建到IIS上. 如果在项目中直接更改属性,更换调试服务器类型,会报错 ...
- 页面多个Jquery版本共存的冲突问题,解决方法!
示例如下: <script type="text/javascript" src="jquery.js"></script> <s ...
- linux C 数组操作
/****************************************************************** * linux C 数组操作 * 声明: * 本文为解决陈颖奇遇 ...
- 学习PHP C扩展之面向对象开发方式 (转)
PHP OOP面向对象之C语言开发方式 学习PHP C扩展有一段时间了,PHP手册里大部分讲的PHP的函数开发方式,网上找OOP资料比较少,想起上个月测试redis 的时候,下载PHP扩展redis源 ...
- Java [leetcode 3] Longest Substring Without Repeating Characters
问题描述: Given a string, find the length of the longest substring without repeating characters. For exa ...