前言:
本例使用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)