美文网首页
学flask的第四天之模板

学flask的第四天之模板

作者: Yznx_请叫我小哥 | 来源:发表于2019-04-01 15:31 被阅读0次
    the photo from unsplash

    session

    session是flask的一个内置对象,我们可以直接使用,但是在使用前我们需要为我们的session设置一个 SECRET_KEY 为了安全。设置方法也很简单:

    from flask import seesion
    app = Flask(__name__)
    app.secret_key = "jlskflsfgsdkfdsflasf"
    

    然后我们可以像是字典那样直接将你想要存储的数据加进去:

    @app.route("/login", methods=["POST", "GET"])
    def login():
        if request.method == "GET":
            return render_template("login.html")
        elif request.method == "POST":
            username = request.form['username']
            session["username"] = username
            return username
    

    当我们想要取出session中的值也是可以的,推荐使用 session.get() 方法去获取值:

    @app.route("/home")
    def home():
        username = None
        if session.get("username"):
            username = session.get("username")
        return render_template("home.html", username=username)
    

    如果你想要删除session的话可以使用 session.pop()方法:

    @app.route("/logout")
    def logout():
        session.pop("username")
        return redirect(url_for("home"))
    

    模板

     模板是flask中比较重要的一个组成部分,flask使用的是 jinjia2模板。我们在前面使用到了模板,其中使用函数 render_template 来渲染模板。
     同时在模板中有很多语法,首先说一下在模板中定义和使用变量的方法:{{ }} 我们用两个双引号来使用变量。{% %} 我们使用这个符号来声明变量。这两个是最基础的,其他都是在这两个上面扩展的。
    例如继承语法:

    {% block name%}
    {% endblock %}
    

    你只需要在父页面中使用block标签将需要子页面来自定义的东西包裹起来,其他的在子页面中都会自动继承父页面。在子页面中只需要这样:

    {%extend "xxx.html"%}
    
    

    如果出现了多重继承的时候还想要保存上一次的效果你需要使用 {{ super()}}来达到目的。
    还有判断:

    {% if %}
    {% elif %}
    {% else%}
    {%endif%}
    

    还有循环:

    {for list in lists}
    
    {endfor}
    

    你还可以使用include标签来将其他HTML文件包含进来:

    {% include%}
    

    在jinjia2模板中,标签都是一对
    同时在模板中,你可以使拥宏定义来实现你想要实现的功能:

    <body>
        {% macro hello() %}
            <h1>你好,世界</h1>
        {% endmacro %}
        {{ hello() }}
    
    效果: image.png

    宏定义就像是在python中定义函数一样,同样你是可以在定义的时候传递参数:

    <body>
        {% macro hello(name) %}
            <h1>你好,{{ name  }}</h1>
        {% endmacro %}
        {{ hello("flask") }}
    </body>
    
    效果: image.png

    同时为了开发简单明了,我们可以将所有的宏定义写到一个文件中,在我们需要使用的时候直接引入就好:


    宏定义文件
     {% from "login.html" import hello %}
        {{ hello("python") }}
    
    image.png
    过滤器
    变量可以通过过滤器修改。过滤器通过管道符号(|)与变量分隔,并且可以在括号中包含可选参数。可以链接多个过滤器。一个过滤器的输出应用于下一个过滤器。例如,将从变量名称和title-case中删除所有HTML标记输出{{name|striptags|title }}title(striptags(name))接受参数的过滤器在参数周围有括号,就像函数调用一样。例如:将使用逗号加入列表{{ listx|join(', ') }}str.join(', ', listx)。关于jinjia2的内置过滤器实在是有点多,所以推荐你去看官方文档选择你自己需要的 jinjia2内置过滤器
    过滤器还有很多,还可以自己创建过滤器,后面会专门讲一下。

    相关文章

      网友评论

          本文标题:学flask的第四天之模板

          本文链接:https://www.haomeiwen.com/subject/uxjybqtx.html