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

首頁 > 編程 > Python > 正文

Python的Flask框架中實(shí)現(xiàn)簡(jiǎn)單的登錄功能的教程

2020-02-23 00:48:14
字體:
供稿:網(wǎng)友

 回顧

在前面的系列章節(jié)中,我們創(chuàng)建了一個(gè)數(shù)據(jù)庫并且學(xué)著用用戶和郵件來填充,但是到現(xiàn)在我們還沒能夠植入到我們的程序中。 兩章之前,我們已經(jīng)看到怎么去創(chuàng)建網(wǎng)絡(luò)表單并且留下了一個(gè)實(shí)現(xiàn)完全的登陸表單。

在這篇文章中,我們將基于我門所學(xué)的網(wǎng)絡(luò)表單和數(shù)據(jù)庫來構(gòu)建并實(shí)現(xiàn)我們自己的用戶登錄系統(tǒng)。教程的最后我們小程序會(huì)實(shí)現(xiàn)新用戶注冊(cè),登陸和退出的功能。

為了能跟上這章節(jié),你需要前一章節(jié)最后部分,我們留下的微博程序。請(qǐng)確保你的程序已經(jīng)正確安裝和運(yùn)行。


在前面的章節(jié),我們開始配置我們將要用到的Flask擴(kuò)展。為了登錄系統(tǒng),我們將使用兩個(gè)擴(kuò)展,Flask-Login 和 Flask-OpenID. 配置如下所示 (fileapp/__init__.py):
 

import osfrom flaskext.login import LoginManagerfrom flaskext.openid import OpenIDfrom config import basedir lm = LoginManager()lm.setup_app(app)oid = OpenID(app, os.path.join(basedir, 'tmp'))

Flask-OpenID 擴(kuò)展為了可以存儲(chǔ)臨時(shí)文件,需要一個(gè)臨時(shí)文件夾路徑。為此,我們提供了它的位置。


重訪我們的用戶模型

Flask-Login擴(kuò)展需要在我們的User類里實(shí)現(xiàn)一些方法。除了這些方法以外,類沒有被要求實(shí)現(xiàn)其它方法。

下面是我們的User類 (fileapp/models.py):
 

class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), unique = True) email = db.Column(db.String(120), unique = True) role = db.Column(db.SmallInteger, default = ROLE_USER) posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')  def is_authenticated(self):  return True  def is_active(self):  return True  def is_anonymous(self):  return False  def get_id(self):  return unicode(self.id)  def __repr__(self):  return '<User %r>' % (self.name)

is_authenticated方法是一個(gè)誤導(dǎo)性的名字的方法,通常這個(gè)方法應(yīng)該返回True,除非對(duì)象代表一個(gè)由于某種原因沒有被認(rèn)證的用戶。

is_active方法應(yīng)該為用戶返回True除非用戶不是激活的,例如,他們已經(jīng)被禁了。

is_anonymous方法應(yīng)該為那些不被獲準(zhǔn)登錄的用戶返回True。

最后,get_id方法為用戶返回唯一的unicode標(biāo)識(shí)符。我們用數(shù)據(jù)庫層生成唯一的id。
 

用戶加載回調(diào)

現(xiàn)在我們通過使用Flask-Login和Flask-OpenID擴(kuò)展來實(shí)現(xiàn)登錄系統(tǒng)

首先,我們需要寫一個(gè)方法從數(shù)據(jù)庫加載到一個(gè)用戶。這個(gè)方法會(huì)被Flask-Login使用(fileapp/views.py):
 

@lm.user_loaderdef load_user(id): return User.query.get(int(id))

記住Flask-Login里的user id一直是unicode類型的,所以在我們把id傳遞給Flask-SQLAlchemy時(shí),有必要把它轉(zhuǎn)化成integer類型。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乡城县| 桂平市| 五河县| 湟源县| 襄城县| 富民县| 邢台县| 聊城市| 南宁市| 宜宾市| 共和县| 高青县| 临海市| 年辖:市辖区| 五指山市| 固镇县| 伊春市| 平舆县| 南京市| 永城市| 临澧县| 周宁县| 疏附县| 汝州市| 阿拉善右旗| 正镶白旗| 敖汉旗| 焦作市| 修武县| 寿光市| 华蓥市| 南丹县| 荔浦县| 济阳县| 汶上县| 绥芬河市| 镇雄县| 南溪县| 甘泉县| 舒兰市| 大理市|