摘要: 模型 这个术语表示应用使用的持久化实体。在 ORM 中,模型一般是一个 Python 类,类中的属性对应于数据库表中的列。 Flask SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。图 5 1 中的 roles 表和 users 表可像示 阅读全文
posted @ 2019-01-07 17:37 °❆黄雷❄° 阅读(187) 评论(0) 推荐(0) 编辑
摘要: Flask SQLAlchemy 是一个 Flask 扩展,简化了在 Flask 应用中使用 SQLAlchemy 的操作。 SQLAlchemy 是一个强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy 提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能。 与其他多数扩展 阅读全文
posted @ 2019-01-07 17:11 °❆黄雷❄° 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 大多数数据库引擎都有对应的 Python 包,包括开源包和商业包。Flask 并不限制你使用 何种类型的数据库包,因此你可以根据自己的喜好选择使用 MySQL、Postgres、SQLite、 Redis、MongoDB、CouchDB 或 DynamoDB。 如果这些都无法满足需求,还有一些数据库 阅读全文
posted @ 2019-01-07 16:59 °❆黄雷❄° 阅读(3103) 评论(0) 推荐(0) 编辑
摘要: SQL 数据库擅于用高效且紧凑的形式存储结构化数据。这种数据库需要花费大量精力保证数据的一致性,需要考虑停电或硬件失效。为了达到这种程度的可靠性,关系型数据库采用一种称为 ACID 的范式,即 atomicity(原子性)、consistency(一致性)、isolation(隔离性)和 durab 阅读全文
posted @ 2019-01-07 16:55 °❆黄雷❄° 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 所有不符合上节所述的关系模型的数据库统称为 NoSQL 数据库 。NoSQL 数据库一般使用 集合 代替表,使用 文档 代替记录。NoSQL 数据库采用的设计方式使联结变得困难,所以多数根本不支持这种操作。对于结构如图 5 1 所示的 NoSQL 数据库,若要列出各用户及其角色,需要在应用中执行联结 阅读全文
posted @ 2019-01-07 16:53 °❆黄雷❄° 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 关系型数据库把数据存储在 表 中,表为应用中不同的实体建模。例如,订单管理应用的数据库中可能有 customers、products 和 orders 等表。 表中的 列 数是固定的, 行 数是可变的。列定义表所表示的实体的数据属性。例如,customers 表中可能有 name、address、p 阅读全文
posted @ 2019-01-07 16:39 °❆黄雷❄° 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 请求完成后,有时需要让用户知道状态发生了变化,可以是确认消息、警告或者错误提醒。一个典型例子是,用户提交有一项错误的登录表单后,服务器发回的响应重新渲染登录表单,并在表单上面显示一个消息,提示用户名或密码无效。 Flask 本身内置这个功能。如示例 4 6 所示,flash() 函数可实现这种效果。 阅读全文
posted @ 2019-01-07 16:25 °❆黄雷❄° 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 前一版 hello.py 存在一个可用性问题。用户输入名字后提交表单,然后点击浏览器的刷新按钮,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认。之所以出现这种情况,是因为刷新页面时浏览器会重新发送之前发送过的请求。如果前一个请求是包含表单数据的 POST 请求,刷新页面后会再次提交表单。多 阅读全文
posted @ 2019-01-07 16:03 °❆黄雷❄° 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 在新版 hello.py 中,视图函数 index() 有两个任务:一是渲染表单,二是接收用户在表单 中填写的数据。 示例 4 4 是更新后的 index() 视图函数。 示例 4 4 hello.py:使用 GET 和 POST 请求方法处理 Web 表单 app.route 装饰器中多出的 me 阅读全文
posted @ 2019-01-07 15:36 °❆黄雷❄° 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 表单字段是可调用的,在模板中调用后会渲染成 HTML。假设视图函数通过 form 参数把 一个 NameForm 实例传入模板,在模板中可以生成一个简单的 HTML 表单,如下所示: 注意,除了 name 和 submit 字段,这个表单还有个 form.hidden_tag() 元素。这个元素生成 阅读全文
posted @ 2019-01-07 15:11 °❆黄雷❄° 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 使用 Flask WTF 时,在服务器端,每个 Web 表单都由一个继承自 FlaskForm 的类表示。 这个类定义表单中的一组字段,每个字段都用对象表示。字段对象可附属一个或多个 验证函数 。验证函数用于验证用户提交的数据是否有效。 示例 4 2 是一个简单的 Web 表单,包含一个文本字段和一 阅读全文
posted @ 2019-01-07 15:00 °❆黄雷❄° 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 与其他多数扩展不同,Flask WTF 无须在应用层初始化,但是它要求应用配置一个密钥。 密钥是一个由随机字符构成的唯一字符串,通过加密或签名以不同的方式提升应用的安全 性。 Flask 使用这个密钥保护用户会话,以防被篡改。每个应用的密钥应该不同,而且不 能让任何人知道。示例 4 1 展示如何在 阅读全文
posted @ 2019-01-07 14:41 °❆黄雷❄° 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 第 3 章编写的模板都是单向的,所有信息都从服务器流向用户。然而,对多数应用来说, 还需要沿相反的方向流动信息,把用户提供的数据交给服务器来处理。 使用 HTML 可以创建 Web 表单,供用户填写信息。表单数据由 Web 浏览器提交给服务 器,这一过程通常使用 POST 请求。 第 2 章介绍的 阅读全文
posted @ 2019-01-07 14:34 °❆黄雷❄° 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 如果 Web 应用的用户来自世界各地,那么处理日期和时间可不是一个简单的任务。 服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时 (UTC,coordinated universal time)。不过用户看到 UTC 格式的时间会感到困惑,他们更希望看到当地时间,而且采用当 阅读全文
posted @ 2019-01-07 14:24 °❆黄雷❄° 阅读(662) 评论(0) 推荐(0) 编辑
摘要: Web 应用不是仅由 Python 代码和模板组成。多数应用还会使用静态文件,例如模板中 HTML 代码引用的图像、JavaScript 源码文件和 CSS。 你可能还记得,在第 2 章中审查 hello.py 应用的 URL 映射时,其中有一个 static 路由。 这是 Flask 为了支持静态 阅读全文
posted @ 2019-01-07 13:23 °❆黄雷❄° 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 链接 任何具有多个路由的应用都需要可以连接不同页面的链接,例如导航栏。 在模板中直接编写简单路由的 URL 链接不难,但对于包含可变部分的动态路由,在模板 中构建正确的 URL 就很困难了。而且,直接编写 URL 会对代码中定义的路由产生不必要 的依赖关系。如果重新定义路由,模板中的链接可能会失效。 阅读全文
posted @ 2019-01-07 13:12 °❆黄雷❄° 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 如果你在浏览器的地址栏中输入了无效的路由,会看到一个状态码为 404 的错误页面。与 使用 Bootstrap 的页面相比,现在这个错误页面太简陋、平庸,而且与现有页面不一致。 像常规路由一样,Flask 允许应用使用模板自定义错误页面。最常见的错误代码有两个: 404,客户端请求未知页面或路由时显 阅读全文
posted @ 2019-01-07 13:04 °❆黄雷❄° 阅读(694) 评论(0) 推荐(0) 编辑
摘要: Bootstrap 是 Twitter 开发的一个开源 Web 框架,它提供的用户界面组件可用于创建整洁且 具有吸引力的网页,而且兼容所有现代的桌面和移动平台 Web 浏览器。 Bootstrap 是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了 Bootstrap 层叠样式表(C 阅读全文
posted @ 2019-01-07 12:00 °❆黄雷❄° 阅读(641) 评论(0) 推荐(0) 编辑
摘要: 模板 模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。 使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为 渲染 。 为了渲染模板,Flask 使用一个名为 Jinja2 的强大模板引擎。 Jinja2模板引擎 形式最简单的 Jinja2 模 阅读全文
posted @ 2019-01-07 11:16 °❆黄雷❄° 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 什么是路由 处理url和函数之间的关系的程序就是"路由" 在Flask中,路由是通过@app.route装饰器来表示的 不带参数的路由 http://localhost:5000/admin/login 带参数的路由 1. 基本带参路由 参数用来表示 2. 带多个参数的路由 多个参数使用/隔开,并继 阅读全文
posted @ 2019-01-07 08:54 °❆黄雷❄° 阅读(167) 评论(0) 推荐(0) 编辑