Python day42_Flask入门

作者: g_s_007 | 来源:发表于2018-07-05 21:51 被阅读0次

模板代码复用

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

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

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

包含

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

上代码:

Python部分:

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

04_index.html 部分

<p>这是一个p标签</p>
<p>包含在使用时,如果包含的模板文件不存在时,
    程序会抛出TemplateNotFound异常,
    可以加上 ignore missing 关键字。
    如果包含的模板文件不存在,
    会忽略这条include语句</p>
# include.html 将要加载过来的html文件
{% include 'include.html' ignore missing %}
<p>这是第二个p标签</p>
</body>

include.html部分

<body>
    <ul>
        <li>列表1</li>
        <li>列表2</li>
        <li>列表3</li>
        <li>列表4</li>
    </ul>
</body>

模板继承

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

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

实例:

python部分:

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


父模板部分:base.html

<p>这是网页顶部内容</p>
# 用block 占位 用center(可以任意起名) 声明这段内容
{% block center %}
    <p>这是父模板的中间内容</p>
{% endblock %}
<p>这是网页底部内容</p>

字模板部分:02_index.html

<body>
# 用extends 声明这个模板继承自哪个html文件
{% extends 'base.html' %}
# 用block重写 center 这段的内容,如果想要父类内容,用super()继承
{% block center %}
    {{ super() }}
    <p>这是子模板的中间部分</p>
{% endblock %}
</body>

宏(macro):

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

实例:

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


{% macro input(label = "",type = "text",name = "",value = "") %}
     <label>{{ label }}</label><input type="{{ type }}" name="{{ name }}" value="{{ value }}"><br/>
{% endmacro %}

#在06_index.html中引入macro.html

{% import 'macro.html' as func %}

#在06_index.html中使用模板

<form>
    {{ 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="注册") }}
</form>

#python 部分:
    
@app.route('/index6')
def index6():
    return render_template('06_index.html')

模板中特有的变量和函数

  • config

  • request

  • session

  • g变量

  • url_for()

  • get_flashed_messages()

      html 部分:
      
      <body>
      {{ config['DEBUG']}} <br>
      {{ config }} <br>
      {{ url_for }} <br>
      {{ request }} <br>
      {#url_root: url_root: http://127.0.0.1:5000/ #}
      {{ request.url_root }} <br>
      {#url_rule: url_rule: /index7 #}
      {{ request.url_rule }} <br>
      {#url: url: http://127.0.0.1:5000/index7 #}
      {{ request.url }} <br>
      {{ session.get('name') }} <br>
      {#g变量的name :#}
      {{ g.name }} <br>
      #url_for会根据传入的路由器函数名,返回该路由对应的URL
      #在模板中始终使用url_for()就可以安全的修改路由绑定的URL
      #不比担心模板中渲染出错的链接
      <a href="{{ url_for('log',mobile = 123) }}">登录</a> <br>
      {#获取闪现消息:#}
      {% for message in get_flashed_messages() %}
      {{ message }}
      {% endfor %}
      
      </body>
      
      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/<int:mobile>')
      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入门

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