数据库模型
定义数据库中一张表及其字段的类,通常叫做数据模型。ORM(SQLAlchemy) 会将类的实例关联到数据库表中的数据行,并翻译相关操作。
就让我们从用户模型开始吧,利用 WWW SQL Designer 工具,我画了一张图来设计用户表的各个字段(译者注:实际表名为 user):
id
字段通常存在于所有模型并用作 主键 。每个用户都会被数据库分配一个 id 值,并存储到这个字段中。大多数情况下,主键都是数据库自动赋值的,我只需要提供 id
字段作为主键即可。
username
, email
和 password_hash
字段被定义为字符串(数据库术语中的 VARCHAR
),并指定其最大长度,以便数据库可以优化空间使用率。 username
和 email
字段的用途不言而喻, password_hash
字段值得提一下。 我想确保我正在构建的应用采用安全最佳实践,因此我不会将用户密码明文存储在数据库中。 明文存储密码的问题是,如果数据库被攻破,攻击者就会获得密码,这对用户隐私来说可能是毁灭性的。 如果使用 哈希密码 ,这就大大提高了安全性。 这将是另一章的主题,所以现在不需分心。
用户表构思完毕之后,我将其用代码实现,并存储到新建的模块 app/models.py 中,代码如下:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
def __repr__(self):
return '<User {}>'.format(self.username)
上面创建的 User 类继承自 db.Model,它是 Flask-SQLAlchemy 中所有模型的基类。 这个类将表的字段定义为类属性,字段被创建为 db.Column
类的实例,它传入字段类型以及其他可选参数,例如,可选参数中允许指示哪些字段是唯一的并且是可索引的,这对高效的数据检索十分重要。
该类的 __repr__
方法用于在调试时打印用户实例。在下面的 Python 交互式会话中你可以看到 __repr__()
方法的运行情况:
>>> from app.models import User
>>> u = User(username='susan', email='susan@example.com')
>>> u
<User susan>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论