Flask框架實現登錄注冊功能(mysql數據庫)


前言:

本例使用Flask框架完成登錄和注冊操作,包括前端(index.html,regist.html)和后端(app.py)兩部分,前端頁面不過多介紹,直接進入后端部分:

邏輯思路:

登錄部分:運行程序默認進入登錄界面,輸入賬號和密碼點擊登錄,系統進入”獲取登錄請求參數及處理“階段(@app.route('/login')),驗證賬號密碼正確后跳轉到目標界面。

注冊部分:運行程序輸入注冊部分的路由進入注冊界面,輸入賬號、密碼和確認密碼,系統進入”獲取注冊請求及處理“階段(@app.route('/registuser')),判斷兩次輸入密碼是否一致,一致則跳轉到登錄界面,否則彈出警告框提示用戶重新輸入。

主要步驟:

①導入需要的擴展包

#導入數據庫模塊
import pymysql

from flask import Flask
from flask import render_template

#導入前台請求的request模塊
from flask import request
import traceback
#導入彈出警告框模塊
import win32api,win32con

②定義登錄界面路由

#默認登錄頁面
@app.route('/')
def login():
    return render_template('login.html')

③定義注冊界面路由

#訪問注冊頁面
@app.route('/regist')
def regist():
    return render_template('regist.html')

④獲取登錄請求參數及處理

@app.route('/login')
def getLoginRequest():
    # 查詢用戶名及密碼是否匹配及存在
    # 連接數據庫,此前在數據庫中創建數據庫TESTDB
    db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
    # 使用cursor()方法獲取操作游標
    cursor = db.cursor()
    # SQL 查詢語句
    sql = "select * from user where user=" + request.args.get('user') + " and password=" + request.args.get(
        'password') + ""
    try:
        # 執行sql語句
        cursor.execute(sql)
        results = cursor.fetchall()
        print(len(results))
        if len(results) == 1:
            return '登錄成功'       #返回需要跳轉的頁面或需要顯示的字符串
        else:
            return '用戶名或密碼不正確'
        # 提交到數據庫執行
        db.commit()
    except:
        # 如果發生錯誤則回滾
        traceback.print_exc()
        db.rollback()
    # 關閉數據庫連接
    db.close()

⑤獲取注冊請求及處理

@app.route('/registuser')
def getRigistRequest():
#把用戶名和密碼注冊到數據庫中

    #連接數據庫,此前在數據庫中創建數據庫flask
    db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
    #使用cursor()方法獲取操作游標
    cursor = db.cursor()
    #獲取輸入框內容
    username=request.args.get('user')
    password=request.args.get('password')
    password2=request.args.get('password2')
    print(password)
    print(password2)
    #判斷兩次輸入密碼是否一致,一致則跳轉到登錄界面,不一致則彈出警告,要求用戶重新輸入
    if password==password2:
        # SQL 插入語句
        sql = "INSERT INTO user(user, password) VALUES ("+username+", "+password+")"
        try:
            # 執行sql語句
            cursor.execute(sql)
            # 提交到數據庫執行
            db.commit()
             #注冊成功之后跳轉到登錄頁面
            return render_template('login.html')
        except:
            #拋出錯誤信息
            traceback.print_exc()
            # 如果發生錯誤則回滾
            db.rollback()
            return '注冊失敗'
        # 關閉數據庫連接
        db.close()
    else:
        win32api.MessageBox(0,"兩次輸入密碼不一致,請重新輸入!","提醒",win32con.MB_ICONWARNING)
        return render_template('regist.html')

完整代碼:

#導入數據庫模塊
import pymysql

from flask import Flask
from flask import render_template

#導入前台請求的request模塊
from flask import request
import traceback
#導入彈出警告框模塊
import win32api,win32con

#創建Flask應用實例
app = Flask(__name__)


#默認登錄頁面
@app.route('/')
def login():
    return render_template('login.html')

#訪問注冊頁面
@app.route('/regist')
def regist():
    return render_template('regist.html')

#獲取注冊請求及處理
@app.route('/registuser')
def getRigistRequest():
#把用戶名和密碼注冊到數據庫中

    #連接數據庫,此前在數據庫中創建數據庫flask
    db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
    #使用cursor()方法獲取操作游標
    cursor = db.cursor()
    #獲取輸入框內容
    username=request.args.get('user')
    password=request.args.get('password')
    password2=request.args.get('password2')
    print(password)
    print(password2)
    #判斷兩次輸入密碼是否一致,一致則跳轉到登錄界面,不一致則彈出警告,要求用戶重新輸入
    if password==password2:
        # SQL 插入語句
        sql = "INSERT INTO user(user, password) VALUES ("+username+", "+password+")"
        try:
            # 執行sql語句
            cursor.execute(sql)
            # 提交到數據庫執行
            db.commit()
             #注冊成功之后跳轉到登錄頁面
            return render_template('login.html')
        except:
            #拋出錯誤信息
            traceback.print_exc()
            # 如果發生錯誤則回滾
            db.rollback()
            return '注冊失敗'
        # 關閉數據庫連接
        db.close()
    else:
        win32api.MessageBox(0,"兩次輸入密碼不一致,請重新輸入!","提醒",win32con.MB_ICONWARNING)
        return render_template('regist.html')

# 獲取登錄參數及處理
@app.route('/login')
def getLoginRequest():
    # 查詢用戶名及密碼是否匹配及存在
    # 連接數據庫,此前在數據庫中創建數據庫TESTDB
    db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
    # 使用cursor()方法獲取操作游標
    cursor = db.cursor()
    # SQL 查詢語句
    sql = "select * from user where user=" + request.args.get('user') + " and password=" + request.args.get(
        'password') + ""
    try:
        # 執行sql語句
        cursor.execute(sql)
        results = cursor.fetchall()
        print(len(results))
        if len(results) == 1:
            return '登錄成功'       #返回需要跳轉的頁面或需要顯示的字符串
        else:
            return '用戶名或密碼不正確'
        # 提交到數據庫執行
        db.commit()
    except:
        # 如果發生錯誤則回滾
        traceback.print_exc()
        db.rollback()
    # 關閉數據庫連接
    db.close()


# 使用__name__ == '__main__'是 Python 的慣用法,確保直接執行此腳本時才
# 啟動服務器,若其他程序調用該腳本可能父級程序會啟動不同的服務器
if __name__ == '__main__':
    app.run(debug=True)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM