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内置过滤器
过滤器还有很多,还可以自己创建过滤器,后面会专门讲一下。
网友评论