国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

9.注冊和登錄功能實現(xiàn)(2)—— 注冊與登錄的錯誤提示

duan199226 / 2315人閱讀

摘要:在注冊和登錄功能實現(xiàn)中,我們已經(jīng)獲取到了頁面過來的登錄或者注冊數(shù)據(jù),接下來我們需要與數(shù)據(jù)庫中的數(shù)據(jù)做驗證,驗證通過才能登錄或者注冊。

在注冊和登錄功能實現(xiàn)(1)中,我們已經(jīng)獲取到了頁面POST過來的登錄或者注冊數(shù)據(jù),接下來我們需要與數(shù)據(jù)庫中的數(shù)據(jù)做驗證,驗證通過才能登錄或者注冊。我們平時在登錄網(wǎng)站時,如果輸入的用戶名或者密碼錯誤,有的網(wǎng)站是在登錄框附近提示錯誤,也有的是跳轉(zhuǎn)到一個頁面提示出錯,并經(jīng)過幾秒倒計時再返回原來的頁面。
我們在后續(xù)做搜索功能的時候,用頁面跳轉(zhuǎn)來處理未找到結(jié)果的情形,這里就通過使用Flaskflash功能,直接在當(dāng)前頁面顯示錯誤提示。簡單來說,步驟就是在視圖函數(shù)中flash一個字符串,在html模板中使用get_flashed_messages()去獲取這個字符串,并顯示在網(wǎng)頁中。
首先,我們先新建一個exts.py,用于存放一些功能性的函數(shù),在其中寫一個去驗證登錄和注冊信息的函數(shù),如下:

from models import Users

def validate(username, password1, password2=None):
    user = Users.query.filter(Users.username == username).first()
    if password2:
        if user:
            return "用戶名已經(jīng)存在"
        else:
            if len(username) < 4:
                return "用戶名長度至少4個字符"
            elif password1 != password2:
                return "兩次密碼不一致"
            elif len(password1) < 6:
                return "密碼長度至少6個字符"
            else:
                return "注冊成功"
    else:
        if user:
            if user.password == password1:
                return "登錄成功"
            else:
                return "密碼錯誤"
        else:
            return "用戶名不存在"

要使用flash功能,還得設(shè)置一個名為SECRET_KEY的參數(shù),用于加密數(shù)據(jù),我們在config.py中寫進(jìn)去,隨便取個值SECRET_KEY = "THIS-A-SECRET-KEY"。然后在HarpQA.py中,從flask中導(dǎo)入flash,從exts.py中導(dǎo)入validate,修改register視圖函數(shù),如下:

from flask import Flask, render_template, request, flash
from models import db
from exts import validate
import config

app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)

...

@app.route("/register/", methods=["GET", "POST"])
def register():
    if request.method == "GET":
        return render_template("register.html")
    else:
        username = request.form.get("username")
        password1 = request.form.get("password1")
        password2 = request.form.get("password2")
        message = validate(username, password1, password2)
        flash(message)
        return render_template("register.html")

在視圖函數(shù)中flashmessage,接下來我們需要在html中顯示它,我們再去修改base.html(這樣對register.htmllogin.html都能起作用),在body區(qū)域尾部增加如下代碼(直接從Flask官方文檔復(fù)制修改的):

...

{% block body_part %} {% endblock %}
{% with messages = get_flashed_messages() %} {% if messages %}
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

然后運行程序,訪問注冊頁,隨便輸入幾個試試,發(fā)現(xiàn)已經(jīng)能用了:


只是不太美觀,我們再用css調(diào)整一下,借助Boostrap中的警告框樣式,最終結(jié)果如下:

登錄也是同理,就不演示啦。


2017年1月17日補充內(nèi)容:
當(dāng)我們登錄或注冊出現(xiàn)問題,出現(xiàn)的警告框是如上圖紅色的,顯然我們不希望登錄或者注冊成功的時候也是紅色的,我們將提示成功的顏色設(shè)置為藍(lán)色,然后傳入一個參數(shù)給模板,告訴模板現(xiàn)在是成功還是失敗的情況,然后在html中增加if,現(xiàn)在的html代碼如下:

{% with messages = get_flashed_messages() %} {% if messages %}
    {% for message in messages %} {% if status == "OK" %}
  • {% else %}
  • {% endif %} {% endfor %}
{% endif %} {% endwith %}

那么status這個參數(shù)是怎么傳遞給模板呢,我們之前提到在render_templates函數(shù)中傳入,現(xiàn)在我們使用@app.context_processor這個裝飾器,它其實是上下文管理器,其裝飾的函數(shù)返回的內(nèi)容對所有html模板都起作用,用法如下:

@app.context_processor
def my_context_processor():
    status = session.get("status", "")
    return {"status": status}

將其放在HarpQA.py中,它返回一個字典,在任意html中使用{{ key }},就能得到這個字典key對應(yīng)的value。那么session是什么?在現(xiàn)在這個case中,我們簡單理解其為一個保存數(shù)據(jù)的容器,在登錄和注冊的視圖函數(shù)中,驗證完賬號密碼之后,將驗證結(jié)果的信息存入session,例如注冊函數(shù)修改如下:

@app.route("/register/", methods=["GET", "POST"])
def register():
    if request.method == "GET":
        return render_template("register.html")
    else:
        username = request.form.get("username")
        password1 = request.form.get("password1")
        password2 = request.form.get("password2")
        message = validate(username, password1, password2)
        flash(message)
        if message == "注冊成功":
            session["status"] = "OK"
            return redirect(url_for("login"))
        else:
            session["status"] = "BAD"
            return render_template("register.html")

如果注冊成功,就向session中寫入status,值為"OK",反之則為"BAD"。這樣html模板就能根據(jù)status顯示不同的顏色了。flask中還有個g對象也可用于保存和共享數(shù)據(jù),但g對象是基于每一個請求的,不能跨請求使用。我們注冊成功之后,要跳轉(zhuǎn)到登錄頁,此時g就無法使用了,而session是基于這一次http連接的,不同請求都能使用。


實際上更簡單的方法是,我們直接對傳入的{{ message }}進(jìn)行判斷,如果帶有"成功"字符串,就顯示藍(lán)色,否則就顯示紅色。上文主要是為了說明@app.context_processor這個裝飾器,以及sessiong對象的區(qū)別。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41271.html

相關(guān)文章

  • 11.保存登錄狀態(tài)注銷功能

    摘要:目前我們的已經(jīng)完成了注冊和登錄功能,當(dāng)?shù)卿洺晒χ螅撁嫣D(zhuǎn)到首頁,此時我們需要保存用戶的登錄狀態(tài),不管頁面如何跳轉(zhuǎn),除非用戶自己注銷登錄。 目前我們的demo已經(jīng)完成了注冊和登錄功能,當(dāng)?shù)卿洺晒χ螅撁嫣D(zhuǎn)到首頁,此時我們需要保存用戶的登錄狀態(tài),不管頁面如何跳轉(zhuǎn),除非用戶自己注銷登錄。 如之前所說,我們可以用session來保存用戶登錄的這個狀態(tài),當(dāng)?shù)卿涷炞C成功的時候,將當(dāng)前登錄...

    wayneli 評論0 收藏0
  • 實現(xiàn)前后端登錄注冊界面

    摘要:本篇博客講解如何實現(xiàn)前后端的簡單登錄注冊界面,后端代碼由實現(xiàn),主要闡述登錄注冊時網(wǎng)頁工作原理。四登錄后跳轉(zhuǎn)首頁登錄界面獲取到瀏覽器設(shè)置的,再次向服務(wù)器請求跳轉(zhuǎn)到首頁時需要附上這段,服務(wù)器讀取后同意跳轉(zhuǎn)到首頁。 本篇博客講解如何實現(xiàn)前后端的簡單登錄注冊界面,后端代碼由node.js實現(xiàn),主要闡述登錄注冊時網(wǎng)頁工作原理。感興趣的同學(xué)可以參考一下。 注冊界面 功能: 判斷用戶是否輸入郵箱,...

    不知名網(wǎng)友 評論0 收藏0
  • 實現(xiàn)前后端登錄注冊界面

    摘要:本篇博客講解如何實現(xiàn)前后端的簡單登錄注冊界面,后端代碼由實現(xiàn),主要闡述登錄注冊時網(wǎng)頁工作原理。四登錄后跳轉(zhuǎn)首頁登錄界面獲取到瀏覽器設(shè)置的,再次向服務(wù)器請求跳轉(zhuǎn)到首頁時需要附上這段,服務(wù)器讀取后同意跳轉(zhuǎn)到首頁。 本篇博客講解如何實現(xiàn)前后端的簡單登錄注冊界面,后端代碼由node.js實現(xiàn),主要闡述登錄注冊時網(wǎng)頁工作原理。感興趣的同學(xué)可以參考一下。 注冊界面 功能: 判斷用戶是否輸入郵箱,...

    Blackjun 評論0 收藏0
  • Laravel 上手教程之實現(xiàn)用戶注冊登錄

    摘要:在文件的標(biāo)簽中加上以下代碼新手上路注冊登陸上面只是引用了一些簡單的的,也沒什么難的,不用傷心。 Laravel身為最優(yōu)雅的PHP框架,很多學(xué)習(xí)PHP的小伙伴造就對Laravel垂涎欲滴。今天就來實現(xiàn)你的愿望,讓我們一起從零開始,利用Laravel實現(xiàn)Web應(yīng)用最常見的注冊和登錄功能!所有的課程源碼已放在Github上:laravel-start. Race Start ! 首先我們來...

    stormgens 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<