Python day42_Flask入门

模板代码复用

在模板中,可能会遇到以下情况:

  • 多个模板具有完全相同的顶部和底部内容
  • 多个模板中具有相同的模板代码内容,但是内容中部分值不一样
  • 多个模板中具有完全相同的 html 代码块内容

像遇到这种情况,可以使用 JinJa2 模板中的 宏、继承、包含来进行实现

包含

包含(Include):它的功能是将另一个模板整个加载到当前模板中,并直接渲染

上代码:

Python部分:

@app.route('/index4')
def index4():
    return render_template('04_index.html')

04_index.html 部分

这是一个p标签

包含在使用时,如果包含的模板文件不存在时, 程序会抛出TemplateNotFound异常, 可以加上 ignore missing 关键字。 如果包含的模板文件不存在, 会忽略这条include语句

# include.html 将要加载过来的html文件 {% include 'include.html' ignore missing %}

这是第二个p标签

include.html部分
  • 列表1
  • 列表2
  • 列表3
  • 列表4

模板继承

模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

  • 相当于在父模板中占个位置,当子模板继承父模板时,可以进行填充。
  • 子模板使用 extends 指令声明这个模板继承自哪个模板
  • 父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()

实例:

python部分:

@app.route('/index2')
def index2():
    return render_template('02_index.html')


父模板部分:base.html

这是网页顶部内容

# 用block 占位 用center(可以任意起名) 声明这段内容 {% block center %}

这是父模板的中间内容

{% endblock %}

这是网页底部内容

字模板部分:02_index.html # 用extends 声明这个模板继承自哪个html文件 {% extends 'base.html' %} # 用block重写 center 这段的内容,如果想要父类内容,用super()继承 {% block center %} {{ super() }}

这是子模板的中间部分

{% endblock %}

宏(macro):

  • 把它看作 Jinja2 中的一个函数,它会返回一个模板或者 HTML 字符串
  • 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用
  • 需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复

实例:

#在macro.html中定义一个form表单 input函数


{% macro input(label = "",type = "text",name = "",value = "") %}
     
{% endmacro %} #在06_index.html中引入macro.html {% import 'macro.html' as func %} #在06_index.html中使用模板
{{ func.input('用户名:',name='username') }} {{func.input('身份证号:',name='idcard') }} {{ func.input('密码:',type="password",name='password') }} {{ func.input('确认密码:',type="password" ,name="password2") }} {{ func.input(type="submit",value="注册") }}
#python 部分: @app.route('/index6') def index6(): return render_template('06_index.html')

模板中特有的变量和函数

  • config

  • request

  • session

  • g变量

  • url_for()

  • get_flashed_messages()

      html 部分:
      
      
      {{ config['DEBUG']}} 
    {{ config }}
    {{ url_for }}
    {{ request }}
    {#url_root: url_root: http://127.0.0.1:5000/ #} {{ request.url_root }}
    {#url_rule: url_rule: /index7 #} {{ request.url_rule }}
    {#url: url: http://127.0.0.1:5000/index7 #} {{ request.url }}
    {{ session.get('name') }}
    {#g变量的name :#} {{ g.name }}
    #url_for会根据传入的路由器函数名,返回该路由对应的URL #在模板中始终使用url_for()就可以安全的修改路由绑定的URL #不比担心模板中渲染出错的链接 登录
    {#获取闪现消息:#} {% for message in get_flashed_messages() %} {{ message }} {% endfor %} Python部分: # 需要导入模块:g,session,flash @app.route('/index7') def index7(): g.name = 'lisi' return render_template('07_index.html') app.secret_key = 'wangwu' # 要获得session 的值 首先需要设置session的值 @app.route('/set_session') def set_seesion(): session['name'] = 'zhangsan' return 'set session' @app.route('/login/') def log(mobile): return 'login: %s' % mobile # 使用闪现消息的时候必须要添加秘钥 app.secret_key # 因为flash会往session里面存取 @app.route('/set_flash') def set_flash(): flash('这是闪现消息') return 'set_flash'

web表单

Web 表单是 Web 应用程序的基本功能。

它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。

在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能

08.JPG

09.JPG

使用 Flask-WTF 需要配置参数 SECRET_KEY。

CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。

你可能感兴趣的:(Python day42_Flask入门)