1. 程式人生 > >Flask【第五章】:做一個使用者登入之後檢視使用者資訊的小例子

Flask【第五章】:做一個使用者登入之後檢視使用者資訊的小例子

做一個使用者登入之後檢視使用者資訊的小例子

一、需求

1.使用者名稱:zjk  密碼:zjk

2.使用者登入成功後跳轉到列表頁面

3.失敗有訊息提示,重新登入

4.點選學生名稱之後,可以看到學生的詳細資訊

二、開始

1.後端

from flask import Flask
from flask import request
from flask import render_template
from flask import redirect

USER = {'username': 'oldboy', 'password': "oldboy123"}

STUDENT_DICT 
= { 1: {'name': 'Old', 'age': 38, 'gender': ''}, 2: {'name': 'Boy', 'age': 73, 'gender': ''}, 3: {'name': 'EDU', 'age': 84, 'gender': ''}, } app = Flask(__name__) @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": if request.form["username
"] == USER["username"] and request.form["password"] == USER["password"]: return redirect("/student_list") return render_template("login.html", msg="使用者名稱密碼錯誤") return render_template("login.html", msg=None) # 如果前端Jinja2模板中使用了msg,這裡就算是傳遞None也要出現msg @app.route("/student_list"
) def student(): return render_template("student_list.html", student=STUDENT_DICT) @app.route("/info") def student_info(): stu_id = int(request.args["id"]) stu_info = STUDENT_DICT[stu_id] return render_template("student.html", student=stu_info, stu_id=stu_id) app.run("0.0.0.0", 5000, debug=True)
相信寫的程式碼才是最好的

2.前端

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome to Old Boy EDU</title>
</head>
<body>
    <form method="post">
        使用者名稱:<input type="text" name="username">
        密碼:<input type="text" name="password">
        <input type="submit" value="登入">
        {{ msg }}
    </form>
</body>
</html>
login.html

student_list.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Old Boy EDU</title>
</head>
<body>
Welcome to Old Boy EDU
<table border="2xp">
    <thead>
        <tr>
            <td>id</td>
            <td>name</td>
            <td>option</td>
        </tr>
    </thead>
    <tbody>
        {% for foo in student %}
            <tr>
                <td>{{ foo }}</td>
                <td>{{ student[foo].name }}</td>
                <td><a href="/info?id={{ foo }}">詳細</a></td>
            </tr>
        {% endfor %}
    </tbody>
</table>
</body>
</html>

一點兒也不難
View Code

student.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Old Boy EDU</title>
</head>
<body>
Welcome to Old Boy EDU
<table border="1px">
    <thead>
    <tr>
        <td>id</td>
        <td>name</td>
        <td>age</td>
        <td>gender</td>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>{{ stu_id }}</td>
        <td>{{ student.name }}</td>
        <td>{{ student["age"] }}</td>
        <td>{{ student.get("gender") }}</td>
    </tr>
    </tbody>
</table>
<div><a href="/student_list">返回</a></div>
</body>
</html>

寫不出來說明你沒動腦子
View Code

 

思考題:

1.如果我直接訪問 /student_list 和 /student 是不是也可以?

2.怎麼才能在所有的url地址中校驗是否登入?