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

首頁 > 編程 > Python > 正文

一個基于flask的web應用誕生 記錄用戶賬戶登錄狀態(6)

2019-11-25 16:15:24
字體:
來源:轉載
供稿:網友

之前登錄注冊的功能都已經完成,但是登錄成功回到首頁發現還是白茫茫的一片,對的,title一直都寫得博客,那么最終目的也是寫出一個輕博客來,但是,在發表文章之前是不是要先記錄一下登錄狀態呢?

用戶登錄

登錄狀態的記錄方式有很多種,首先想到的應該就是使用flask自帶的session,但flask還提供了一種更方便的擴展,即flask-login包,使用方式還和之前一樣,首先需要安裝:

pip3.6 install flask-login

然后在default.py中進行初始化:

from flask.ext.login import LoginManager......login_manager=LoginManager()login_manager.session_protection="strong" #可設置為None,basic,strong已提供不同的安全等級login_manager.login_view="login" #設置登錄頁

然后按照需求對User模型進行修改,因為Flask-Login要求User模型必須實現四個方法,分別為:

is_authenticated() 判斷是否登錄,登錄返回True,否則返回False
is_active() 是否允許登錄,即用戶是否已被禁用,如禁用返回False
is_anonymous() False為普通用戶
get_id() 返回用戶唯一標識符,使用Unicode編碼

這四個方法在User模型中直接實現即可,但是還有一種更簡單的方式,即繼承Flask-Login提供的UserMixin類,它里邊包含了這些方法的默認實現,修改后的User模型為:

from flask.ext.login import UserMixinclass User(UserMixin,db.Model):  __tablename__="users"  id=db.Column(db.Integer,primary_key=True)  ......  

flask-login還要求程序實現一個回調函數,已使用指定的標識符家在用戶:

@login_manager.user_loaderdef load_user(user_id):  return User.query.get(int(user_id))

之后,就可以方便的使用flask-login框架,繼續修改首頁模板的導航部分,以便顯示用戶名及相應信息:

{%extends "bootstrap/base.html "%}{% block title%}牛博客 {% endblock %}<!--覆蓋title標簽-->{% block navbar %}<nav class="navbar navbar-inverse"><!-- 導航部分 --> <div class="navbar-header">   <a class="navbar-brand" href="#" rel="external nofollow" rel="external nofollow" >    牛博客   </a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">   <ul class="nav navbar-nav">    <li><a href="/" rel="external nofollow" >首頁</a></li>   </ul>   <ul class="nav navbar-nav navbar-right">    {% if current_user.is_authenticated %}      <li><p class="navbar-text"><a href="#" rel="external nofollow" rel="external nofollow" class="navbar-link">{{current_user.username}}</a> 您好</p></li>      <li><a href="{{url_for('logout')}}" rel="external nofollow" >登出</a></li>    {% else %}      <li><a href="{{url_for('login')}}" rel="external nofollow" >登錄</a></li>    {% endif %}   </ul>  </div><!-- /.navbar-collapse --></nav>{% endblock %}{% block content %} <!--具體內容--><div class="container"></div>{% endblock %}

這里新出現url_for方法,它的主要功能是使用程序中的信息生成URL,比如傳入視圖的方法名,生成對應的url,還可以通過方法的動態參數生成url的參數,如url_for('index',age=5)結果為/?age=5

主要內容為判斷是否登錄,若登錄顯示 {{用戶名}}你好,并提供登出功能,否則顯示登錄鏈接。

修改登錄表單:

class LoginForm(Form):  username=StringField("請輸入用戶名",validators=[DataRequired()])  password=PasswordField("請輸入密碼")  remember_me=BooleanField("記住我")  submit=SubmitField("登錄")

增加記住我項目, BooleanField默認為多選按鈕

修改登錄視圖方法:

@app.route("/login",methods=["GET","POST"])def login():  form=LoginForm()  if form.validate_on_submit():    username = form.username.data    password = form.password.data    user = User.query.filter_by(username=username, password=password).first()    if user is not None:      login_user(user,form.remember_me.data)      return redirect(url_for("index"))    else:      flash("您輸入的用戶名或密碼錯誤")      return render_template("/login.html",form=form) # 返回的仍為登錄頁  return render_template("/login.html",form=form)

其中login_user為flask_login插件提供,用于設置用戶登錄,其中第二個參數即為記住我選項,若輸入True,則提供cookie存儲狀態,否則關閉瀏覽器狀態即取消

新增登出方法:

@app.route("/logout",methods=["GET","POST"])@login_requireddef logout():  logout_user()  return redirect(url_for("index"))

此方法很簡單,直接使用flask-login提供的登出方法即可,注意@login_required裝飾器表示,只有登錄用戶才可訪問此視圖方法。

運行測試一下,輸入首頁地址:

點擊右上角的登錄鍵:

輸入用戶名zhangji 密碼123 并選擇記住我,點擊確定:

注意紅線部分,顯示正常,此時點擊登出:

注意紅線部分,回到初始狀態。

章節結語

接下來本來應該是發帖及關注功能,但很明顯,現在代碼都在default.py中,對于代碼結構越來越力不從心,所以本章的篇幅比較小,下一章將重點對已有代碼進行重構,并對功能進行分組,然后在繼續寫接下來的功能。謝謝觀看。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盈江县| 天气| 莱州市| 平乡县| 木里| 义乌市| 加查县| 金乡县| 黑龙江省| 桃园市| 苗栗县| 台南市| 天柱县| 会东县| 新干县| 城步| 湘潭市| 彭州市| 平遥县| 临邑县| 贵阳市| 墨脱县| 延吉市| 阜南县| 黑龙江省| 双峰县| 昭苏县| 伊宁县| 潜江市| 潮安县| 句容市| 淅川县| 方城县| 寻甸| 昌都县| 祁阳县| 唐山市| 黎平县| 隆化县| 云林县| 贵阳市|