在Flask中验证注册用户的Email
admin
2023-07-30 21:59:12
0

本教程详细介绍在用户注册过程中如何去验证他们的email地址。

工作流程上来讲,在用户注册一个新账户后会寄送一个确认信。直到用户按指示完成了邮件中的“验证”,否则他们的账户会一直处于“未验证”状态。这是大多数网络应用会采用的工作流程。

这当中很重要的一件事就是,未验证的用户有什么权限?或者说,对于你的应用,他们是有全部权限呢,还是被限制的权限呢,还是根本没有权限?对于本教程中的应用,未验证用户会在登录后进到一个页面,会提醒他们只有验证了账户才可以进入应用。

开始前说明一下,很多我们要增加的功能是Flask-用户和Flask-安全的扩展部分——问题来了,为什么不直接用这两个扩展呢?嗯,首先,这是个学习机会。同时,这俩扩展都有局限性,比如支持的数据库。要是你想用RethinkDB怎么办呢?

我们开始吧

Flask基本注册

我们将会要开始一Flask样例,这包括了用户基本注册。从这个github仓库获取代码库。一旦你创建和激活了virtualenv,运行下面的命令来快速开始:

1234567 $ pip install r requirements.txt$ export APP_SETTINGS=\”project.config.DevelopmentConfig\”$ python manage.py create_db$ python manage.py db init$ python manage.py db migrate$ python manage.py create_admin$ python manage.py runserver

在应用运行的状态下,访问http://localhost:5000/register页面,注册一个新用户。注意,注册之后应用会自动登陆,引导你进入主页面。大概看一下,然后运行代码——尤其是user这个蓝图(Blueprint是flask的一个概念)。

完成时停止服务器。

更新当前应用

模型

首先,我们来在我们project/models.py中的User模型里添加上confirmed字段:

1234567891011121314151617181920 class User(db.Model):     __tablename__ = \”users\”     id = db.Column(db.Integer, primary_key=True)    email = db.Column(db.String, unique=True, nullable=False)    password = db.Column(db.String, nullable=False)    registered_on = db.Column(db.DateTime, nullable=False)    admin = db.Column(db.Boolean, nullable=False, default=False)    confirmed = db.Column(db.Boolean, nullable=False, default=False)    confirmed_on = db.Column(db.DateTime, nullable=True)     def __init__(self, email, password, confirmed,                 paid=False, admin=False, confirmed_on=None):        self.email = email        self.password = bcrypt.generate_password_hash(password)        self.registered_on = datetime.datetime.now()        self.admin = admin        self.confirmed = confirmed        self.confirmed_on = confirmed_on

注意此区域是怎样默认成“False”的。还要添加个confirmed_on字段,那是个datetime。为了用队列分析来分析registered_onconfirmed_on日期的不同,所以我想包含这个datetime

让我们完全从头开始创建数据库并迁移吧!所以,先删除数据库dev.sqlite,以及“迁移”文件夹。

控制命令

接下来,在manage.py中,更新create_admin命令,使新的数据库字段生效:

1234567891011 @manager.commanddef create_admin():    \”\”\”Creates the admin user.\”\”\”    db.session.add(User(        email=\”ad@min.com\”,        password=\”admin\”,        admin=True,        confirmed=True,        confirmed_on=datetime.datetime.now())    )    db.session.commit()

要确保导入datetime。现在,先再一次运行下面的指令:

1234 $ python manage.py create_db$ python manage.py db init$ python manage.py db migrate本教程详细介绍在用户注册过程中如何去验证他们的email地址。

工作流程上来讲,在用户注册一个新账户后会寄送一个确认信。直到用户按指示完成了邮件中的“验证”,否则他们的账户会一直处于“未验证”状态。这是大多数网络应用会采用的工作流程。

这当中很重要的一件事就是,未验证的用户有什么权限?或者说,对于你的应用,他们是有全部权限呢,还是被限制的权限呢,还是根本没有权限?对于本教程中的应用,未验证用户会在登录后进到一个页面,会提醒他们只有验证了账户才可以进入应用。

开始前说明一下,很多我们要增加的功能是Flask-用户和Flask-安全的扩展部分——问题来了,为什么不直接用这两个扩展呢?嗯,首先,这是个学习机会。同时,这俩扩展都有局限性,比如支持的数据库。要是你想用RethinkDB怎么办呢?

我们开始吧

Flask基本注册

我们将会要开始一Flask样例,这包括了用户基本注册。从这个github仓库获取代码库。一旦你创建和激活了virtualenv,运行下面的命令来快速开始:

1234567 $ pip install r requirements.txt$ export APP_SETTINGS=\”project.config.DevelopmentConfig\”$ python manage.py create_db$ python manage.py db init$ python manage.py db migrate$ python manage.py create_admin$ python manage.py runserver

在应用运行的状态下,访问http://localhost:5000/register页面,注册一个新用户。注意,注册之后应用会自动登陆,引导你进入主页面。大概看一下,然后运行代码——尤其是user这个蓝图(Blueprint是flask的一个概念)。

完成时停止服务器。

更新当前应用

模型

首先,我们来在我们project/models.py中的User模型里添加上confirmed字段:

1234567891011121314151617181920 class User(db.Model):     __tablename__ = \”users\”     id = db.Column(db.Integer, primary_key=True)    email = db.Column(db.String, unique=True, nullable=False)    password = db.Column(db.String, nullable=False)    registered_on = db.Column(db.DateTime, nullable=False)    admin = db.Column(db.Boolean, nullable=False, default=False)    confirmed = db.Column(db.Boolean, nullable=False, default=False)    confirmed_on = db.Column(db.DateTime, nullable=True)     def __init__(self, email, password, confirmed,                 paid=False, admin=False, confirmed_on=None):        self.email = email        self.password = bcrypt.generate_password_hash(password)        self.registered_on = datetime.datetime.now()        self.admin = admin        self.confirmed = confirmed        self.confirmed_on = confirmed_on

注意此区域是怎样默认成“False”的。还要添加个confirmed_on字段,那是个datetime。为了用队列分析来分析registered_onconfirmed_on日期的不同,所以我想包含这个datetime

让我们完全从头开始创建数据库并迁移吧!所以,先删除数据库dev.sqlite,以及“迁移”文件夹。

控制命令

接下来,在manage.py中,更新create_admin命令,使新的数据库字段生效:

1234567891011 @manager.commanddef create_admin():    \”\”\”Creates the admin user.\”\”\”    db.session.add(User(        email=\”ad@min.com\”,        password=\”admin\”,        admin=True,        confirmed=True,        confirmed_on=datetime.datetime.now())    )    db.session.commit()

要确保导入datetime。现在,先再一次运行下面的指令:

1234 $ python manage.py create_db$ python manage.py db init$ python manage.py db migrate8527562-4\”>$ python manage.

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...