1、Flask 表单:
为了能够处理 web 表单,我们将使用 Flask-WTF,该扩展封装了 WTForms 并且恰当地集成进 Flask 中。
创建一个配置文件以至于容易被编辑。(文件 config.py):
CSRF_ENABLED = True
SECRET_KEY = ‘shi-yan-lou‘
Flaks-WTF 扩展只需要两个配置。
CSRF_ENABLED 配置是为了激活 跨站点请求伪造 保护。在大多数情况下,你需要激活该配置使得你的应用程序更安全些。
SECRET_KEY 配置仅仅当 CSRF 激活的时候才需要,它是用来建立一个加密的令牌,用于验证一个表单。
app/init.py
app.config.from_object(‘config‘)
1、用户登录表单
在 Flask-WTF 中,表单是表示成对象, Form 类的子类。一个表单子类简单地把表单的域定义成类的变量。 我们将要创建一个登录表单,用于用户认证系统。
在我们应用程序中支持的登录机制是标准的用户名/密码类型 我们同时在表单上提供一个 remember me 的选择框,以至于用户可以选择在他们的网页浏览器上种植 cookie ,当他们再次访问的时候,浏览器能够记住他们的登录。
app/forms.py
from flask_wtf import Form
from wtforms import TextField,BooleanField, PasswordField
from wtforms.validators import Required
class LoginForm(Form):
name = TextField(‘Name‘, validators=[Required()])
password = PasswordField(‘password‘, validators=[Required()])
remember_me = BooleanField(‘Remember_me‘, default=False)
Required 是一个验证器,一个函数,它能够作用于一个域,用于对用户提交的数据进行验证。 Required 验证器只是简单地检查相应域提交的数据是否是空。
Flask-SQLAlchemy 的应用:
Flask-SQLAlchemy 扩展来管理我们应用程序的数据。这个扩展封装了 SQLAlchemy项目,这是一个 对象关系映射器 或者 ORM。
ORMs 允许数据库应用程序与对象一起工作,而不是表以及 SQL。执行在对象的操作会被 ORM 翻译成数据库命令。
1、迁移:使用 SQLAlchemy-migrate 来跟踪数据库的更新
2、配置(文件 config.py):
import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI =
‘sqlite:///‘+ os.path.
join(basedir,
‘app.db‘)
SQLALCHEMY_MIGRATE_REPO = os.path.
join(basedir,
‘db_repository‘)
SQLALCHEMY_DATABASE_URI 是 Flask-SQLAlchemy 扩展需要的,该变量存储我们数据库文件的路径。
SQLALCHEMY_MIGRATE_REPO 是文件夹,我们将会把 SQLAlchemy-migrate 数据文件存储在这里
当我们初始化应用程序的时候,我们也必须初始化数据库。这是我们更新后的初始化文件(文件 app/init.py)
fromflask
importFlask
fromflask.ext.sqlalchemy
importSQLAlchemy
app = Flask(__name__)
app.config.from_object(
‘config‘)
db = SQLAlchemy(app)
fromapp
importviews, models 3、数据库模型
id 字段通常会在所有模型中,并且用于作为主键。在数据库的每一个用户会被赋予一个不同的id值,存储在这个字段中。幸好这是自动完成的,我们仅仅需要的是提供 id 这个字段。
nickname 以及 email字段是被定义成字符串,并且指定了最大的长度以便数据库可以优化空间占用。
role 字段是一个整型,我们将使用它来表示哪个用户是管理员,哪个不是。
现在我们已经决定了用户表的样子,剩下的工作就是把它转换成代码(文件 app/models.py)
#-*- coding:utf-8 -*-
from app import db
ROLE_USER = 0
ROLE_ADMIN = 1
class User(db.Model):
"""每一个属性定义一个字段"""
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), index = True, unique = True)
email = db.Column(db.String(120), index = True, unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
def __repr__(self):
return ‘<User %r>‘ % (self.nickname)
我们刚刚创建的 User 类包含一些字段,这些字段被定义成类的变量。字段是被作为 db.Column类的实例创建的,db.Column 把字段的类型作为参数,并且还有一些其它可选的参数,比如表明字段是否唯一。
repr 方法告诉 Python 如何打印这个类的对象。我们将用它来调试。
4、创建数据库