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()

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