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()
python flask-02
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.