python flask-02

from datetime import timedelta

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

app = Flask(__name__,  # 導入名稱, flask會根據該名稱查詢靜態文件/模板文件存儲路徑
            # flask官方推薦使用__name__, 如果使用__name__, 從當前文件所有的文件夾中查詢靜態文件/模板文件路徑
            static_folder="static",  # 設置靜態文件的存儲路徑
            static_url_path="/res/image",  # 設置靜態文件的訪問路徑
            template_folder="templates"  # 設置模板文件的存儲路徑
            )
# 設置應用祕鑰  給cookie中的sessionid進行加密
# base64.b64encode(os.urandom(48))  生成隨機字符串
app.secret_key = "8Kw1N232SXStdn3TxgO+iYE+dYvHOVv/YfREP0A+o5iSPHUc8BBFgQVovHxGr71c"
# 設置session的過期時間
app.permanent_session_lifetime = timedelta(days=7)

#
# 開發中, 會對配置進行封裝  提供了三種方式

class Config:
    # 定義和配置同名的類屬性
    DEBUG = True


# 從對象中加載配置  要求掌握
app.config.from_object(Config)


# 從py文件中加載配置
# app.config.from_pyfile("config.py")

# 從環境變量中加載配置
# app.config.from_envvar("ENV_CONFIG")


@app.route('/index5', methods=['GET'])
def index5():
    return "index5"


@app.route('/')
def index():
    username = session.get("username")
    if username:
        # session刪除數據
        # session.pop("username", None)
        return "歡迎回來, %s" % username

    return redirect(url_for("login"))


# 用戶登錄
@app.route('/login', methods=['GET', 'POST'])
def login():
    # 判斷是否爲GET請求
    if request.method == 'GET':  # 顯示頁面
        # 取出session中的數據
        username = session.get("username")
        # 如果已登錄, 直接跳轉到首頁
        if username:
            return redirect(url_for("index"))

        # 讀取網頁內容, 返回html字符串
        with open("login.html") as f:
            html_str = f.read()
            return html_str

    # POST處理  提交數據
    # 獲取參數
    username = request.form.get("username")
    password = request.form.get("password")
    # 校驗密碼
    if username == "laowang" and password == "123":
        # 讓session支持設置過期時間  過期時間默認爲31天
        session.permanent = True
        # 用session記錄用戶的登錄狀態   類字典對象
        session["username"] = username
        # 如果登錄成功, 跳轉到首頁
        return redirect(url_for("index"))
    else:
        return "登錄失敗"


# 一旦設置了路由變量, 視圖函數就必須設置和路由變量同名的形參,形參會接收路由變量的值
@app.route('/user/<user_id>')
def user(user_id):
    print(user_id)
    return "user"


@app.route('/index2')
def index2():
    # 獲取視圖函數的動態url,必須手動設置動態部分的內容
    url1 = url_for("user", user_id=12)
    print(url1)
    return "index2"


# 所有轉換器都繼承了BaseConverter
@app.route('/user1/<int:user_id>')
def user1(user_id):  # 一旦設置了路由變量,視圖函數就必須設置和路由變量同名的形參,形參會接收路由變量的值
    print(user_id)
    print(type(user_id))
    return "user"


# 部分轉換器可以傳遞參數, 以便設置更靈活的格式要求
@app.route('/news/<string(minlength=2, maxlength=5):news_name>')
def news(news_name):
    print(news_name)
    return "news"


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章