Flask框架(2)--編寫簡單的用戶注冊--登錄場景


為了更好的理解web前后端的工作業務邏輯:本筆記記錄用flask框架編寫的一個最初級的代碼實現簡單的用戶注冊,登錄場景:

初次進入首頁,提示--游客,歡迎參觀,有登錄和注冊選項,

 

登錄成功后的用戶,會顯示歡迎(比如用admin用戶登錄):

 頁面代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>
{% if session.name  %}
    <h3>您好,歡迎{{ session.name }}!</h3>
{% else %}
    <h3>游客,歡迎參觀<br><a href="login">請登錄</a><br><a href="signin">請注冊</a></h3>
{% endif %}
</body>
</html>

 

點擊登錄進入登錄頁面

填寫錯誤的用戶名或密碼會有錯誤提示

頁面代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="/login" method="POST">
    <table>
        <tr>
            <th colspan="2">用戶登錄</th>
        </tr>
        <tr>
            <th>用戶名</th>
            <td>
                <input name="username" type="text" value="">
            </td>
        </tr>
        <tr>
            <th>密碼</th>
            <td>
                <input name="passwd" type="text" value="">
            </td>
        </tr>
        <tr>
            <th colspan="2">
                <input name="login" type="submit" value="登錄">
            </th>
        </tr>
         <tr>
            <th colspan="2">
                沒有賬號點擊<a href="signin">注冊</a>
            </th>
        </tr>
        沒有賬號點擊<a href="signin">注冊</a>
    </table>
{{ msg }}
</form>
</body>
</html>

 

沒有賬號可點擊注冊進入注冊頁面

 注冊信息輸入不完整會有相關提示:

頁面代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注冊</title>
</head>
<body>
<form action="/signin" method="POST">
    <table>
        <tr>
            <th colspan="2">用戶注冊</th>
        </tr>
        <tr>
            <th>用戶名</th>
            <td>
                <input name="username" type="text" value="">
            </td>
        </tr>
        <tr>
            <th>密碼</th>
            <td>
                <input name="passwd" type="text" value="">
            </td>
        </tr>
        <tr>
            <th>確認密碼</th>
            <td>
                <input name="passwd1" type="text" value="">
            </td>
        </tr>
        <tr>
            <th colspan="2">
                <input name="login" type="submit" value="注冊">
            </th>
        </tr>
    </table>

{{ msg }}
</form>

</body>
</html>

注冊成功后會跳轉至注冊成功頁面,點擊立即登錄可跳轉至登錄頁面:

框架代碼如下:

# -*- coding: utf-8 -*-
# @Time     : 2019/4/28 20:39
# @Author   : lc

from flask import Flask, render_template, request, session, redirect, url_for
from Flask2.sqlite import sqlite_insert, sqlite_select
import sqlite3  # 引入數據庫

app = Flask(__name__)  # 創建一個Flask實例
app.secret_key = 'abcde11ef'  # 設置session密鑰

'''根路由支持POST和GET請求,進入index頁面'''
@app.route('/', methods=['GET', 'POST'])
def hello_world():
    return render_template('index.html')

'''注冊支持POST和GET請求,進入signin頁面,合法的注冊數據寫入數據庫'''
@app.route('/signin', methods=['GET', 'POST'])
def signin():
    method = request.method  # 獲取請求方式
    if method == 'GET':
        return render_template('signin.html')
    else:
        user_name = request.form.get('username')
        password = request.form.get('passwd')
        password1 = request.form.get('passwd1')
        if user_name and password and password1:  # 判斷必填項
            if password == password1:
                sqlite_insert(user_name, password)  # 實例化數據庫插入方法
                succ = "注冊成功"
                return render_template('signin_success.html', msg=succ)
            else:
                err = "登錄失敗,兩次密碼輸入不一致"
                # 返回HTML可以添加模板語言,可以放在body里面用{{}}引入
                return render_template('signin.html', msg=err)
        else:
            err = "請輸入完整的注冊信息"
            return render_template('signin.html', msg=err)  #

'''登錄支持POST和GET請求,進入login頁面,合法發起請求后查詢數據庫進行數據匹配'''
@app.route('/login', methods=['GET', 'POST'])
def login():
    method = request.method  # 獲取請求方式
    if method == 'GET':
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('passwd')
        result = sqlite_select(username, password)  # 實例化數據庫查詢方法
        print(result)
        if result:
            if username == result[1] and password == result[2]:
                session['name'] = result[1]  # 設置session值
                return render_template('index.html')
        else:
            err = "登錄失敗,用戶名或密碼錯誤"
            # 返回HTML可以添加模板語言,可以放在body里面用{{}}引入
            return render_template('login.html', msg=err)



if __name__ == '__main__':
    app.run()

 

ps:用戶注冊后的密碼會加密后再存入數據庫,可調用以下方法對密碼進行加密

import hashlib
def hash_code(pwd):
    md5=hashlib.md5() # 獲取MD5對象
    md5.update(pwd.encode('utf-8')) #將傳入的pwd編碼后,更新MD5的狀態
    return md5.hexdigest() #返回十六進制的MD5碼
if __name__ == '__main__':
    print(hash_code('123456'))

# 輸出結果:e10adc3949ba59abbe56e057f20f883e

 


免責聲明!

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



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