• python flask框架 tempates 模版的使用


    在py文件同级下 建立templates文件夹,再文件夹中编写html文件

     

    1 向模版中传递参数:

     1 '''
     2 1 向模板传送 参数
     3 '''
     4 @app.route('/')
     5 def index():
     6     name = 'Python'
     7     context = {
     8         'name':'Python',
     9         'age' : 18 ,
    10         'num_list': [1,2,3,4,5,6,7,8,9,10]
    11     }
    12     return render_template('index.html',context=context,name=name )
     1 <body>
     2 hello world!
     3 
     4 <br>
     5 <p> {{ context }} </p>
     6 
     7 姓名:{{ context['name'] }},{{ name }}
     8 <br>
     9 年龄:{{ context['age'] }}
    10 <br>
    11 num_list:{{ context['num_list'] }}
    12 <br>
    13 {% for i in context['num_list'] %}
    14     <p>{{ i }}</p>
    15 {% endfor %}
    16 
    17 
    18 </body>

     

     2 反向路由:

     1 '''
     2 2 反向路由
     3 url_for(视图函数名)) 能够返回视图的相对url
     4 利用redirect( url_for(视图函数) ) 实现重定向
     5 '''
     6 @app.route('/redirect')
     7 def redi():
     8     redir = url_for('index',_external=True)
     9     print(redir)
    10     return redirect(redir)

     

     

     3 过滤器、自定义过滤器:

     1 '''
     2 3 过滤器:
     3 
     4     safe 禁用转义  <p>{{ '<em>hello</em>' | safe }}</p>
     5     capitalize 首字母大写  <p>{{ 'hello' | capitalize }}</p>
     6     lower 小写  <p>{{ 'HELLO' | lower }}</p>
     7     upper 大写  <p>{{ 'hello' | upper }}</p>
     8     title 每个单词首字母大写  <p>{{ 'hello' | title }}</p>
     9     trim 去掉首位空格   <p>{{ ' hello world ' | trim }}</p>
    10     reverse 反转字符串   <p>{{ 'olleh' | reverse }}</p>
    11     format 格式化  <p>{{ '%s is %d' | format('name',17) }}</p>
    12     striptags 删掉html标签    <p>{{ '<em>hello</em>' | striptags }}</p>
    13 
    14 列表操作:
    15     first 取第一个元素 <p>{{ [1,2,3,4,5,6] | first }}</p>
    16     last 取最后一个元素   <p>{{ [1,2,3,4,5,6] | last }}</p>
    17     length 获取列表长度    <p>{{ [1,2,3,4,5,6] | length }}</p>
    18     sum 列表求和    <p>{{ [1,2,3,4,5,6] | sum }}</p>
    19     sort 列表排序   <p>{{ [6,2,3,1,5,4] | sort }}</p>
    20 
    21 语句块过滤:
    22   {% filter upper %}
    23     this is a Flask Jinja2 introduction
    24   {% endfilter %}
    25   
    26 自定义过滤器: 两种方式
    27     1 app.add_template_filter(函数名,过滤器名)
    28     2 @app.template_filter(过滤器名)
    29 '''
    30 @app.route('/filter')
    31 def filter():
    32     str = 'abCdeF hello woRld'
    33     li = [1,2,5,4,3,76,65,8,9]
    34     return render_template('filter.html',str=str,li=li)
    35 # 自定义过滤器
    36 def hahah(li):
    37     return str(li)+'hahaha'
    38 app.add_template_filter(hahah,'hahah')
    39 
    40 @app.template_filter('heihei')
    41 def heihei(li):
    42     return str(li) + 'heihei'

     

     1 <body>
     2 {{ str }}
     3 <br>
     4 {{ str | upper }}
     5 <br>
     6 {{ str | lower }}
     7 <br>
     8 {{ str | capitalize }}
     9 <br>
    10 {{ str | title }}
    11 <br>
    12 {{ str | reverse }}
    13 <br>
    14 列表操作:
    15 <br>
    16 {{ li }}
    17 <br>
    18 {{ li | length }}
    19 <br>
    20 {{ li | first }}
    21 <br>
    22 {{ li|last }}
    23 <br>
    24 {{ li | sort }}
    25 
    26 <br>
    27 块过滤:
    28 {% filter upper %}
    29     hello worldQ!
    30 {% endfilter %}
    31 <br>
    32 
    33 自定义过滤器:
    34 <br>
    35 {{ li | hahah }}
    36 <br>
    37 {{ li | heihei }}
    38 
    39 
    40 </body>

     

     

     4 web表单接收参数 wtf表单的使用:

     1 '''
     2 3 web表单 WTForms
     3 '''
     4 # 获取常规表单数据的方法
     5 @app.route('/form',methods=['GET','POST'])
     6 def form():
     7     if request.method == 'POST':
     8         username = request.form['username']
     9         password = request.form['password']
    10         print(username , password)
    11     return render_template('form.html')
    12 
    13 
    14 # 利用Flask的 WTF 实现表单
    15 # 配置 csrf_token 的生成项
    16 app.config['SECRET_KEY'] = 'python12'
    17 # 配置表单类
    18 class Form(FlaskForm):
    19     # user字段 text类型input框 校验输入数据
    20     user = StringField(validators=[DataRequired()])
    21     # equalto 检测 与ps2 内容是否一样
    22     ps = PasswordField(validators=[DataRequired(),EqualTo('ps2','err')])
    23     ps2=PasswordField(validators=[DataRequired()])
    24     submit = SubmitField()
    25 
    26 # 利用Flask的 WTF 实现表单
    27 @app.route('/WTForm',methods=['GET','POST'])
    28 def wtForm():
    29     form = Form()  # 拿到一个表单对象
    30     if form.validate_on_submit(): # 能够自动检验 提交的表单是否经过验证 返回True或者False
    31         # 获取表单数据
    32         user = form.user.data
    33         ps = form.ps.data
    34         ps2 = form.ps2.data
    35         print user,ps,ps2
    36     if request.method == "POST":
    37         # flask 操作后端
    38         flash(u'信息发生错误!')
    39 
    40     print(form.validate_on_submit()) #能够检验 提交是否经过验证,返回True或者False
    41 
    42 
    43     return render_template('form.html',form=form)
     1 <body>
     2 普通表单:
     3 <br>
     4 <form method='post'>
     5     <input type="text" name="username" placeholder='Username'>
     6     <br>
     7     <input type="password" name="password" placeholder='password'>
     8     <br>
     9     <input type="submit">
    10 </form>
    11 <hr>
    12 WTF表单:
    13 <form method="post">
    14     {{ form.csrf_token() }}
    15     {{ form.user.label }}:{{ form.user }}
    16     <br>
    17     {{ form.ps.label }}:{{ form.ps }}
    18     <br>
    19     {{ form.ps2.label }}:{{ form.ps2 }}
    20     <br>
    21     {{ form.submit }}
    22     <br>
    23     {% for info in get_flashed_messages() %}
    24         {{ info }}<br>
    25     {% endfor %}
    26 </form>
    27 
    28 
    29 
    30 </body>

     

     4 宏的编写与使用

    1 '''
    2 4 宏 继承 包含 模板的使用
    3 '''
    4 @app.route('/macro')
    5 def macro():
    6     return render_template('macro.html')
     1 <body>
     2 定义 宏 和调用 宏
     3 <br>
     4 {# 定义宏 #}
     5 {% macro input(type,value,size) %}
     6     <input type="{{ type }}" name="" value="{{ value }}" size="{{ size }}">
     7 {% endmacro %}
     8 
     9 {# 调用宏 #}
    10 {{ input('text','登陆','60') }}
    11 <br>
    12 {{ input('password','注册','20') }}
    13 
    14 <br>
    15 
    16 引用外部宏
    17 <br>
    18 {% import 'macros.html' as f %}
    19 {{ f.fun() }}
    20 
    21 
    22 
    23 
    24 </body>
    外部宏:macros.html 文件:
    1
    {% macro fun() %} 2 <input type="text" name="username" placeholde="Username"> 3 <br> 4 <input type="password" name="password" placeholde="Password"> 5 <br> 6 <input type="submit"> 7 <br> 8 {% endmacro %}

     

  • 相关阅读:
    在前端眼中pc端和移动的开发区别
    两个对象的合并
    关于后台传来的json是含英文字母的string
    关于jquery的取消阻止默认事件
    练习:模态对话框
    JS之DOM节点增删改查与属性设置
    JS之DOM Event(事件)
    JS的DOM对象之DOM节点
    JS的history对象和location对象
    JS的BOM对象之window对象,利用window对象方法实现定时器
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7765172.html
Copyright © 2020-2023  润新知