国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python的Flask框架中驗證注冊用戶的Email的方法

2019-11-25 17:04:34
字體:
來源:轉載
供稿:網友

本教程詳細介紹在用戶注冊過程中如何去驗證他們的email地址。

工作流程上來講,在用戶注冊一個新賬戶后會寄送一個確認信。直到用戶按指示完成了郵件中的“驗證”,否則他們的賬戶會一直處于“未驗證”狀態。這是大多數網絡應用會采用的工作流程。

這當中很重要的一件事就是,未驗證的用戶有什么權限?或者說,對于你的應用,他們是有全部權限呢,還是被限制的權限呢,還是根本沒有權限?對于本教程中的應用,未驗證用戶會在登錄后進到一個頁面,會提醒他們只有驗證了賬戶才可以進入應用。

開始前說明一下,很多我們要增加的功能是Flask-用戶和Flask-安全的擴展部分――問題來了,為什么不直接用這兩個擴展呢?嗯,首先,這是個學習機會。同時,這倆擴展都有局限性,比如支持的數據庫。要是你想用RethinkDB怎么辦呢?
我們開始吧

Flask基本注冊

我們將會要開始一Flask樣例,這包括了用戶基本注冊。從這個github倉庫獲取代碼庫。一旦你創建和激活了virtualenv,運行下面的命令來快速開始:

$ 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字段:

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_on和confirmed_on日期的不同,所以我想包含這個datetime。

讓我們完全從頭開始創建數據庫并遷移吧!所以,先刪除數據庫dev.sqlite,以及“遷移”文件夾。

控制命令

接下來,在manage.py中,更新create_admin命令,使新的數據庫字段生效:

@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。現在,先再一次運行下面的指令:

$ python manage.py create_db$ python manage.py db init$ python manage.py db migrate$ python manage.py create_admin

register()視圖函數

最后,在我們再次注冊用戶之前,我們需要改一下project/user/views.py中的register()視圖函數……

user = User( email=form.email.data, password=form.password.data)

改成下面的:

user = User( email=form.email.data, password=form.password.data, confirmed=False)

明白了嗎?思考下為什么要把confirmed默認成False。

嗯好。再運行一遍應用。轉入到http://localhost:5000/register,再注冊一個新用戶。如果你在SQLite瀏覽器中打開了你的SQLite數據庫,你會看到:

那么,這個我新注冊的用戶,michael@realpython.com沒有被驗證。讓我們驗證它。

添加email驗證

產生驗證令牌

郵件驗證應包含一個特殊URL,使得用戶只需簡單地點擊它,即可驗證他/她的賬戶。理想情況下,這個URL應該看起來像這樣

主站蜘蛛池模板: 渑池县| 临安市| 兴化市| 宁河县| 大城县| 陆川县| 水富县| 乌恰县| 吉首市| 甘洛县| 杭锦旗| 嘉黎县| 岐山县| 家居| 桃江县| 福建省| 保康县| 莱芜市| 赫章县| 法库县| 安福县| 丰镇市| 桂林市| 隆回县| 大田县| 婺源县| 上思县| 澄迈县| 沅江市| 泗洪县| 呼伦贝尔市| 松桃| 吉隆县| 松溪县| 青河县| 鄂伦春自治旗| 康乐县| 衡南县| 昌邑市| 手机| 富宁县|