国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類(lèi)導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Flask框架的學(xué)習(xí)指南之用戶登錄管理

Flask框架的學(xué)習(xí)指南之用戶登錄管理

2020-09-12 14:52茁壯的小草 Python

本文是Flask框架的學(xué)習(xí)指南系列文章的第三篇,主要給大家講述的是制作flask的登陸管理模塊,有需要的小伙伴可以參考下

繼續(xù)flask的學(xué)習(xí)之旅。今天介紹flask的登陸管理模塊,還記得上一篇中的blog小項(xiàng)目么,登錄是咱們自己寫(xiě)的驗(yàn)證代碼,大概有以下幾個(gè)步驟:

1、在登錄框中輸入用戶名和密碼

2、flask view函數(shù)獲取用戶密碼,然后到數(shù)據(jù)庫(kù)中查詢?cè)撚脩粜畔ⅲM(jìn)行匹配

3、如果成功,就寫(xiě)入session中,重定向到首頁(yè)

4、如果對(duì)于特定視圖,必須要登錄才能訪問(wèn),那么需要在每個(gè)視圖函數(shù)驗(yàn)證session里是否存在該用戶。

今天繼續(xù)改造blog項(xiàng)目,介紹的flask-login模塊就是替我們來(lái)搞定這些業(yè)務(wù)相關(guān)度較少的公用功能,它可以幫助我們:

在會(huì)話中存儲(chǔ)當(dāng)前活躍的用戶 ID,讓你能夠自由地登入和登出。
讓你限制登入(或者登出)用戶可以訪問(wèn)的視圖。
處理讓人棘手的 “記住我” 功能。
幫助你保護(hù)用戶會(huì)話免遭 cookie 被盜的牽連。
可以與以后可能使用的 Flask-Principal 或其它認(rèn)證擴(kuò)展集成。

一、如何使用flask-login模塊?

1、安裝flask-login

E:\workdir\dct-server-5055187\src>pip install flask-login

2、使用flask-login

 2.1)  在/blog2/__init__.py添加:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#引用包
from flask.ext.login import LoginManager
 
#登陸管理
#聲明login對(duì)象
login_manager = LoginManager()
#初始化綁定到應(yīng)用
login_manager.init_app(app)
 
#聲明默認(rèn)視圖函數(shù)為login,當(dāng)我們進(jìn)行@require_login時(shí),如果沒(méi)登陸會(huì)自動(dòng)跳到該視圖函數(shù)處理
login_manager.login_view = "login"
 
#當(dāng)?shù)顷懗晒螅摵瘮?shù)會(huì)自動(dòng)從會(huì)話中存儲(chǔ)的用戶 ID 重新加載用戶對(duì)象。它應(yīng)該接受一個(gè)用戶的 unicode ID 作為參數(shù),并且返回相應(yīng)的用戶對(duì)象。
@login_manager.user_loader
def load_user(userid):
return User.query.get(int(userid))

2.2) 修改User模型(紅色部分為新增代碼)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from flask.ext.login import UserMixin
 
from blog2 import db
 
class User(db.Model, UserMixin):
  __tablename__ = 'b_user'
  id = db.Column(db.Integer,primary_key=True)
  username = db.Column(db.String(10),unique=True)
  password = db.Column(db.String(16))
 
  def __init__(self,username,password):
    self.username = username
    self.password = password
  def __repr__(self):
    return '<User %r>' % self.username

該用戶類(lèi)必須實(shí)現(xiàn)以下幾個(gè)方法:

is_authenticated

當(dāng)用戶通過(guò)驗(yàn)證時(shí),也即提供有效證明時(shí)返回 True(只有通過(guò)驗(yàn)證的用戶會(huì)滿足 login_required 的條件。)

is_active

如果這是一個(gè)活動(dòng)用戶且通過(guò)驗(yàn)證,賬戶也已激活,未被停用,也不符合任何你 的應(yīng)用拒絕一個(gè)賬號(hào)的條件,返回 True 。不活動(dòng)的賬號(hào)可能不會(huì)登入(當(dāng)然, 是在沒(méi)被強(qiáng)制的情況下)。

is_anonymous

如果是一個(gè)匿名用戶,返回 True 。(真實(shí)用戶應(yīng)返回 False 。)

get_id()

返回一個(gè)能唯一識(shí)別用戶的,并能用于從 user_loader 回調(diào)中加載用戶的 unicode 。注意著 必須 是一個(gè) unicode —— 如果 ID 原本是 一個(gè) int 或其它類(lèi)型,你需要把它轉(zhuǎn)換為 unicode 。
要簡(jiǎn)便地實(shí)現(xiàn)用戶類(lèi),你可以從 UserMixin 繼承,它提供了對(duì)所有這些方法的默認(rèn)實(shí)現(xiàn)。我們這里使用UserMixin實(shí)現(xiàn)。

2.3) 修改view函數(shù)(紅色部分為新增)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from flask.ext.login import login_required, login_user, logout_user
 
from blog2.model.User import User
from blog2.model.Category import Category
import os
 
from blog2 import app,db
from flask import request,render_template,flash,abort,url_for,redirect,session,Flask,g
 
@app.route('/')
@login_required
def show_entries():
  categorys = Category.query.all()
  return render_template('show_entries.html',entries=categorys)
 
@app.route('/add',methods=['POST'])
@login_required
def add_entry():
  #——————————————————————————————————————————————
  # 第一版登陸方式
  # if not session.get('logged_in'):
  #   abort(401)
  #——————————————————————————————————————————————
 
  title = request.form['title']
  content = request.form['text']
  category = Category(title,content)
  db.session.add(category)
  db.session.commit()
  flash('New entry was successfully posted')
  return redirect(url_for('show_entries'))
 
@app.route('/login',methods=['GET','POST'])
def login():
  error = None
  if request.method == 'POST':
    user = User.query.filter_by(username=request.form['username']).first()
    #——————————————————————————————————————————————————————————————————————————
    #第一版登陸方式
    # passwd = User.query.filter_by(password=request.form['password']).first()
    #
    # if user is None:
    #   error = 'Invalid username'
    # elif passwd is None:
    #   error = 'Invalid password'
    # else:
    #   session['logged_in'] = True
    #   flash('You were logged in')
    #   return redirect(url_for('show_entries'))
    #——————————————————————————————————————————————————————————————————————————
 
    login_user(user)
    flash('Logged in successfully.')
    return redirect(url_for('show_entries'))
 
  return render_template('login.html', error=error)
 
@app.route('/logout')
@login_required
def logout():
  #——————————————————————————————————————————————
  # 第一版登出方式
  # session.pop('logged_in', None)
  #——————————————————————————————————————————————
   logout_user()
  flash('You were logged out')
  return redirect(url_for('show_entries'))

通過(guò)flask-login管理登陸,代碼非常簡(jiǎn)潔簡(jiǎn)單:

@login_required:該裝飾器放到需要登陸才能訪問(wèn)的視圖上,如果沒(méi)有登陸訪問(wèn)有限制的視圖就會(huì)跳到login頁(yè)面,由__init__.py中l(wèi)ogin_manager.login_view = "login"控制
login_user(user):傳入一個(gè)user對(duì)象進(jìn)行登陸驗(yàn)證,正確返回true,否則返回false
logout_user():登出函數(shù),清空session中用戶信息

2.4) 模板中引用用戶

?
1
2
3
{% if current_user.is_authenticated() %}
 Hi {{ current_user.name }}!
{% endif %}

將之前l(fā)ayout.html和show_entries.html模板中判斷用戶是否登陸方式改為flask-login中的方式:

{% if not current_user.is_authenticated() %}

current_user值:在用戶沒(méi)有登陸時(shí),值為<flask_login.AnonymousUserMixin object at 0x0000000003DCF550>,也就是匿名用戶
                用戶登陸后,值為<User u'admin'>

當(dāng)然,用戶登陸還可以根據(jù)實(shí)際情況自己定制,具體不在一一詳述。

【參考文檔】

       Flask-Login中文版:http://www.pythondoc.com/flask-login/#id1
       Flask-Login英文版:http://flask-login.readthedocs.io/en/latest/

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品18久久久 | 一区二区三区 在线 | 国产精品久久久久久久午夜 | 亚洲在线观看免费视频 | 91精品久久久久久久久久 | 九九九色 | 国产日韩精品一区 | 欧美伦理电影一区二区 | 久久久精品| 久久伊人亚洲 | 欧美一级在线视频 | 婷婷综合| 一区二区三区在线播放 | 91精品国产九九九久久久亚洲 | 久久综合av | 国产麻豆一区二区三区四区 | 日本不卡视频 | 国产美女自拍视频 | 亚洲精品国产区欧美区在线 | 国产亚洲精品成人 | 亚洲黄色在线视频 | www.国产精| 成人小视频在线观看 | 久久精品片 | 日韩和欧美的一区二区 | 日韩国产一区二区 | 好看的一级毛片 | 波多野结衣三区 | 国产欧美精品一区二区 | 国产一区二区三区免费在线观看 | 精品影院| 久色视频在线观看 | www.欧美| 五月婷婷在线视频 | 日本精品久久 | 亚洲国产成人精品久久 | 中文字幕在线第一页 | 亚洲乱码国产乱码精品精的特点 | 欧美bbbxxx| 国产一区亚洲二区三区 | 日韩高清一区 |