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