close

小型會員登入系統

這版會做到:

  • 用表單讓使用者輸入帳號密碼
  • 在伺服器端檢查帳密
  • 登入成功跳到會員頁
  • 登入失敗提示錯誤訊息

🛠 1. 預備工作

目錄結構建議這樣:

/你的專案
    app.py
    /templates
        login.html
        member.html
        error.html

🧩 2. 建立 login.html

<!DOCTYPE html>
<html>
<head>
    <title>登入</title>
</head>
<body>
    <h1>會員登入</h1>
    <form action="/signin" method="post">
        <input type="text" name="username" placeholder="帳號">
        <br><br>
        <input type="password" name="password" placeholder="密碼">
        <br><br>
        <button type="submit">登入</button>
    </form>
</body>
</html>

🧩 3. 建立 member.html

<!DOCTYPE html>
<html>
<head>
    <title>會員頁</title>
</head>
<body>
    <h1>歡迎進入會員頁!</h1>
    <a href="/">回首頁</a>
</body>
</html>

🧩 4. 建立 error.html

<!DOCTYPE html>
<html>
<head>
    <title>登入失敗</title>
</head>
<body>
    <h1>登入失敗!請重新輸入</h1>
    <a href="/">回首頁</a>
</body>
</html>

🧩 5. app.py 程式碼

from flask import Flask, render_template, request, redirect

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('login.html')

@app.route('/signin', methods=['POST'])
def signin():
    username = request.form['username']
    password = request.form['password']

    if username == 'admin' and password == '1234':
        return redirect('/member')
    else:
        return redirect('/error')

@app.route('/member')
def member():
    return render_template('member.html')

@app.route('/error')
def error():
    return render_template('error.html')

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

✅ 流程總結

  • 首頁 (/) 顯示登入畫面
  • 表單送出到 /signin,後端檢查帳號密碼
  • 如果帳號是 admin、密碼是 1234,跳到 /member
  • 否則跳到 /error 提示登入失敗

🔥 Bonus:升級版 顯示「錯誤訊息」

改進 app.py:

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('login.html')

@app.route('/signin', methods=['POST'])
def signin():
    username = request.form['username']
    password = request.form['password']

    if username == 'admin' and password == '1234':
        return redirect('/member')
    else:
        return redirect(url_for('error', message='帳號或密碼錯誤'))

@app.route('/member')
def member():
    return render_template('member.html')

@app.route('/error')
def error():
    message = request.args.get('message', '發生錯誤')
    return render_template('error.html', message=message)

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

對應 error.html

<!DOCTYPE html>
<html>
<head>
    <title>登入失敗</title>
</head>
<body>
    <h1>{{ message }}</h1>
    <a href="/">回首頁</a>
</body>
</html>

✅ 小結

功能 說明
記錄登入狀態 session['user'] = username
驗證登入 if 'user' in session
登出清除 session.pop('user', None)
密鑰設定 app.secret_key = '自己設定的秘密字串'
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(0) 人氣()