Changelog

全名 页面 提交时间 (Ascending) Unsort 内容 注释 ...
ySJ 2.0/chapter16/#253 2010-04-23 15:03:24 尽管通常情况下总是搭建运行数据库驱动的 Web 应用,有时你还是需要添加一两张一次性的静态页面,例如“关于”页面,或者“隐私策略”页面等等。
ySJ 2.0/chapter16/#256 2010-04-23 15:07:09 这个问题的解决方案是使用位于 <literal>django.contrib.flatpages</literal> 开发包中的 Django 简单页面(flatpages)应用程序。该应用让你能够通过 Django 管理站点来管理这些一次性的页面,还可以让你使用 Django 模板系统指定它们使用哪个模板。
ySJ 2.0/chapter16/#257 2010-04-23 15:10:46 它在后台使用Django模型,这意味着它把页面项别的数据一样保存在数据库中,也就是说你可以使用标准Django数据库API来存取页面。
ySJ 2.0/chapter16/#260 2010-04-23 15:13:02 当创建简单页面时,你指定它与哪个URL以及和哪个站点相关联 。
ySJ 2.0/chapter16/#261 2010-04-23 15:13:28 (有关站点的更多信息,请查阅”多站点“一节。)
ySJ 2.0/chapter16/#267 2010-04-23 15:17:49 添加 <literal>'django.contrib.flatpages'</literal><literal>INSTALLED_APPS</literal> 设置。<literal>django.contrib.flatpages</literal>依赖<literal>django.contrib.sites</literal>,所以确保它们都在<literal>INSTALLED_APPS</literal>里。
ySJ 2.0/chapter16/#277 2010-04-23 15:19:54 该应用捆绑的 <literal>FlatPage</literal> 模型在 <literal>django/contrib/flatpages/models.py</literal> 进行定义,如下所示:
ySJ 2.0/chapter16/#289 2010-04-23 15:23:06 框架不对它作任何特殊处理。
ySJ 2.0/chapter16/#293 2010-04-23 15:24:14 框架不对它作任何特殊处理。
ySJ 2.0/chapter16/#300 2010-04-23 15:25:06 该设置项集成了 Djangos 验证/用户框架,该框架于第十四章详述。
ySJ 2.0/chapter16/#303 2010-04-23 15:26:26 该项设置集成了 Django 多站点框架,该框架在本章的“多站点”一节中有所阐述。
ySJ 2.0/chapter16/#306 2010-04-23 15:28:08 要了解更多内容,请查阅“添加、修改和删除简单页面”一节。
ySJ 2.0/chapter16/#309 2010-04-23 15:29:26 每当 Django 引发 404 错误,作为最后的办法,该中间件将根据所请求的 URL 检查简单页面数据库。
ySJ 2.0/chapter16/#312 2010-04-23 15:31:04 如果找到一个匹配项,它将载入该简单页面的模板(如果没有指定的话,将使用默认模板 <literal>flatpages/default.html</literal> )。
ySJ 2.0/chapter16/#313 2010-04-23 15:31:30 同时,它把一个简单的上下文变量<literal>flatpage</literal>(一个简单页面对象)传递给模板。
ySJ 2.0/chapter16/#314 2010-04-23 15:32:35 模板解析过程中,它实际用的是<literal>RequestContext</literal>
ySJ 2.0/chapter16/#318 2010-04-23 15:32:59 注意
2.0/chapter07/#451 2010-04-23 15:33:34 一些提交的消息只有一两个单词,我们无法得知详细的信息。 根据下面的代码 应该是通过空格拆分英文单词的做法
ySJ 2.0/chapter16/#322 2010-04-23 15:33:52 通常,你可以把 <literal>FlatpageFallbackMiddleware</literal> 放在列表最后,因为它是最后的办法。
ySJ 2.0/chapter16/#335 2010-04-23 15:39:40 前面已经提到,简单页面表现为 <literal>django/contrib/flatpages/models.py</literal> 中的标准 Django 模型。这样,你就可以使用Django数据库API来存取简单页面对象,例如:
ySJ 2.0/chapter16/#340 2010-04-23 15:40:35 缺省情况下,系统使用模板 <literal>flatpages/default.html</literal> 来解析简单页面,但你也可以通过设定 <literal>FlatPage</literal> 对象的 <literal>template_name</literal> 字段来更改特定简单页面的模板。
ySJ 2.0/chapter16/#350 2010-04-23 15:44:27 注意我们使用了<literal>safe</literal>模板过滤器来允许<literal>flatpage.content</literal>引入原始HTML而不必转义。
ySJ 2.0/chapter16/#365 2010-04-23 15:47:26 运行 <literal>manage.py syncdb</literal> 命令将所需的表添加到数据库中。
ySJ 2.0/chapter16/#367 2010-04-23 15:48:13 <literal>manage.py syncdb</literal> 在数据库中创建了一个 <literal>django_redirect</literal> 表。
ySJ 2.0/chapter16/#368 2010-04-23 15:48:33 这是一个简单的查询表,只有<literal>site_id</literal>、old_path和new_path三个字段。
ySJ 2.0/chapter16/#371 2010-04-23 15:49:00 要了解更多信息,请参阅“增加、变更和删除重定向”一节。
ySJ 2.0/chapter16/#376 2010-04-23 15:50:05 (查阅前面的“多站点”一节可了解关于 <literal>SITE_ID</literal> 和多站点框架的更多细节) 然后,它将执行以下两个步骤:
ySJ 2.0/chapter16/#389 2010-04-23 15:50:48 注意
ySJ 2.0/chapter16/#398 2010-04-23 15:51:47 通过管理界面
ySJ 2.0/chapter16/#403 2010-04-23 15:53:16 同过Python API
ySJ 2.0/chapter16/#405 2010-04-23 15:54:17 重定向表现为<literal>django/contrib/redirects/models.py</literal> 中的一个标准 Django 模型。因此,你可以通过Django数据库API来存取重定向对象,例如:
ySJ 2.0/chapter16/#412 2010-04-23 15:54:54 CSRF, 又叫会话跳转,是一种网站安全攻击技术。
ySJ 2.0/chapter16/#414 2010-04-23 15:56:30 乍一看,要理解这种攻击技术比较困难,因此我们在本节将使用两个例子来说明。
ySJ 2.0/chapter16/#418 2010-04-23 15:59:46 假定你已经登录到 <literal>example.com</literal> 的网页邮件账号。该网站有一个只向<literal>example.com/logout</literal>的注销按钮。就是说,注销其实就是访问<literal>example.com/logout</literal>
ySJ 2.0/chapter16/#418 2010-04-23 16:03:04 假定你已经登录到 <literal>example.com</literal> 的网页邮件账号。该网站有一个指向<literal>example.com/logout</literal>的注销按钮。就是说,注销其实就是访问<literal>example.com/logout</literal>
ySJ 2.0/chapter16/#423 2010-04-23 16:09:09 很明显,登出一个邮件网站也不是什么严重的安全问题。但是同样的攻击可能针对任何相信用户的站点,比如在线银行和电子商务网站。这样的话可能在用户不知情的情况下就下订单付款了。
ySJ 2.0/chapter16/#435 2010-04-23 16:12:08 并且发送一个值为'true'的POST变量。
ySJ 2.0/chapter16/#434 2010-04-23 16:14:05 这就确保了用简单的指向<literal>example.com/logout</literal><literal>POST</literal> 不会让用户登出;要让用户登出,用户必须通过 <literal>POST</literal><literal>example.com/logout</literal> 发送请求
ySJ 2.0/chapter16/#436 2010-04-23 16:15:37 <literal>confirm</literal>
ySJ 2.0/chapter16/#449 2010-04-23 16:17:05 这样,从服务器端访问表单时,可以检查该保密的字段。
ySJ 2.0/chapter16/#448 2010-04-23 16:18:04 第二步就是给所有 <literal>POST</literal>
ySJ 2.0/chapter16/#449 2010-04-23 16:19:02 的form标签一个隐藏字段,它的值是保密的并根据用户进程的 ID 生成。
ySJ 2.0/chapter16/#450 2010-04-23 16:19:20 这样,从服务器端访问表单时,可以检查该保密的字段。不吻合时可以引发一个错误。
ySJ 2.0/chapter16/#463 2010-04-23 16:20:58 同时,它也必须在响应被压缩或解压之前对响应结果进行处理,因此 <literal>CsrfMiddleware</literal> 必须在 <literal>GZipMiddleware</literal> 之后执行。一旦将它添加到<literal>MIDDLEWARE_CLASSES</literal>设置中,你就完成了工作。
ySJ 2.0/chapter16/#464 2010-04-23 16:21:57 参见第十五章的“MIDDLEWARE_CLASSES顺序”小节以了解更多。
ySJ 2.0/chapter16/#474 2010-04-23 16:23:36 403 错误页面的内容检测到了跨域请求伪装。
ySJ 2.0/chapter16/#474 2010-04-23 16:23:48 403 错误页面的内容是检测到了跨域请求伪装。
ySJ 2.0/chapter16/#475 2010-04-23 16:24:02 终止请求。
ySJ 2.0/chapter16/#490 2010-04-23 16:25:51 (参阅第 14 章了解更多关于会话的内容。)如果你使用了自定义会话或者身份验证框架手动管理会话 cookies,该中间件将帮不上你的忙。
ySJ 2.0/chapter16/#492 2010-04-23 16:26:29 如果你的应用程序以某种非常规的方法创建 HTML 页面(例如:在 Javascript 的<literal>document.write</literal>语句中发送 HTML 片段),你可能会绕开了向表单添加隐藏字段的过滤器。
« < 86 87 88 89 90 91 92 > » 96 pages