成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

duan199226 / 2376人閱讀

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

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

from models import Users

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

要使用flash功能,還得設(shè)置一個(gè)名為SECRET_KEY的參數(shù),用于加密數(shù)據(jù),我們?cè)?b>config.py中寫(xiě)進(jìn)去,隨便取個(gè)值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,接下來(lái)我們需要在html中顯示它,我們?cè)偃バ薷?b>base.html(這樣對(duì)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 %}

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


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

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


2017年1月17日補(bǔ)充內(nèi)容:
當(dāng)我們登錄或注冊(cè)出現(xiàn)問(wèn)題,出現(xiàn)的警告框是如上圖紅色的,顯然我們不希望登錄或者注冊(cè)成功的時(shí)候也是紅色的,我們將提示成功的顏色設(shè)置為藍(lán)色,然后傳入一個(gè)參數(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這個(gè)參數(shù)是怎么傳遞給模板呢,我們之前提到在render_templates函數(shù)中傳入,現(xiàn)在我們使用@app.context_processor這個(gè)裝飾器,它其實(shí)是上下文管理器,其裝飾的函數(shù)返回的內(nèi)容對(duì)所有html模板都起作用,用法如下:

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

將其放在HarpQA.py中,它返回一個(gè)字典,在任意html中使用{{ key }},就能得到這個(gè)字典key對(duì)應(yīng)的value。那么session是什么?在現(xiàn)在這個(gè)case中,我們簡(jiǎn)單理解其為一個(gè)保存數(shù)據(jù)的容器,在登錄和注冊(cè)的視圖函數(shù)中,驗(yàn)證完賬號(hào)密碼之后,將驗(yàn)證結(jié)果的信息存入session,例如注冊(cè)函數(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 == "注冊(cè)成功":
            session["status"] = "OK"
            return redirect(url_for("login"))
        else:
            session["status"] = "BAD"
            return render_template("register.html")

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41271.html

相關(guān)文章

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

    摘要:目前我們的已經(jīng)完成了注冊(cè)和登錄功能,當(dāng)?shù)卿洺晒χ?,?yè)面跳轉(zhuǎn)到首頁(yè),此時(shí)我們需要保存用戶(hù)的登錄狀態(tài),不管頁(yè)面如何跳轉(zhuǎn),除非用戶(hù)自己注銷(xiāo)登錄。 目前我們的demo已經(jīng)完成了注冊(cè)和登錄功能,當(dāng)?shù)卿洺晒χ?,?yè)面跳轉(zhuǎn)到首頁(yè),此時(shí)我們需要保存用戶(hù)的登錄狀態(tài),不管頁(yè)面如何跳轉(zhuǎn),除非用戶(hù)自己注銷(xiāo)登錄。 如之前所說(shuō),我們可以用session來(lái)保存用戶(hù)登錄的這個(gè)狀態(tài),當(dāng)?shù)卿涷?yàn)證成功的時(shí)候,將當(dāng)前登錄...

    wayneli 評(píng)論0 收藏0
  • 實(shí)現(xiàn)前后端登錄注冊(cè)界面

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

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

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

    Blackjun 評(píng)論0 收藏0
  • Laravel 上手教程之實(shí)現(xiàn)用戶(hù)注冊(cè)登錄

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

    stormgens 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<