<small id='IKl94Ay'></small> <noframes id='p130rvbF'>

  • <tfoot id='Odmi'></tfoot>

      <legend id='7tTf3a'><style id='1BmbEz'><dir id='qIV5jynGsW'><q id='8X6F3fG'></q></dir></style></legend>
      <i id='Rh1XalD'><tr id='oBacv'><dt id='WwD0a'><q id='8410h'><span id='kXI7j'><b id='X0oc4QNn2M'><form id='b3JSOcX5vM'><ins id='8WRc9'></ins><ul id='qe1k0'></ul><sub id='BvunrZsokg'></sub></form><legend id='UHels3N'></legend><bdo id='bQC5'><pre id='Sd3T4ufnV5'><center id='FoWY'></center></pre></bdo></b><th id='pZ9xVcyW'></th></span></q></dt></tr></i><div id='c95KqLdWe'><tfoot id='ufKTv'></tfoot><dl id='9S245'><fieldset id='0Y6FhB'></fieldset></dl></div>

          <bdo id='oM7h'></bdo><ul id='h7pa1NXF'></ul>

          1. <li id='LQkNaZ'></li>
            登陆

            下载章鱼app-小白学Flask——看看模板的那些事(一)

            admin 2019-11-05 151人围观 ,发现0个评论

            原创: JAP君 JAVAandPython君

            本文内容:

            1. 模板

            2. 过滤器

            3. 引进表单的拓宽

            4. 运用表单承受并查验参数

            模板

            在Flask傍边的模板被称为Jinja2模板,那么咱们怎样去运用模板呢?咱们能够看到下面两块代码:


            # -*- coding: utf-8 -*-
            from flask import Flask, render_template
            app = Flask(__name__)
            @app.route("/index")
            def index():
            return render_template("index.html", name="kuls", age=18)
            if __name__ == '__main__':
            app.run(debug=True)


            在templates傍边创立的index.html









            name = {{name}}


            下载章鱼app-小白学Flask——看看模板的那些事(一)

            age = {{age}}





            咱们运转代码:



            从上面能够知道在Flask傍边模板变量为 {{变量名}} ,模板烘托运用render_template()函数。

            在代码中还能发现咱们在render_template()是经过键值对的方法来给模板变量赋值,那么咱们还能经过其他方法来进行传参吗?当然是能够的,咱们能够经过字典的方法来进行传参。


            # -*- coding: utf-8 -*-
            from flask import Flask, render_template
            app = Flask(__name__)
            @app.route("/index")
            def index():
            data = {
            "name":"kuls",
            "age": 18
            }
            return render_template("index.html", **data)
            if __name__ == '__main__':
            app.run(debug=True)


            那还有什么骚操作没?看下面:


            # -*- coding: utf-8 -*-
            f辛集天气rom flask import Flask, render_template
            app = Flask(__name__)
            @app.route("/index")
            def index():
            data = {
            "name":"kuls",
            "age": 18,
            "dict":{"city": "cs"},
            "list":[0, 1, 2, 3],
            "int":1
            }
            return render_template("index.html", **data)
            if __name__ == '__main__':
            app.run(debug=True)







            Title


            name = {{name}}


            age = {{age}}


            dict city= {{ dict["city"] }}


            dict city= {{ dict.city }}


            list : {{ list }}


            list[int]: {{ list[int] }}


            list[1]+list[2]: {{ list[1]+list[2] }}





            运转一下:




            能够看到咱们能够在模板进步行运算以及对列表或许字典取值。

            过滤器

            字符串过滤器:

            safe:禁用转义;


             

            {{ 'hello' | safe }}


            capitalize:把变量值的首字母转成大写,其他字母转小写;


            {{ 'hello' | capitaliz下载章鱼app-小白学Flask——看看模板的那些事(一)e }}


            lower:把值转成小写;


            {{ 'HELLO' | lower }}


            upper:把值转成大写;


             

            {{ 'hello' | upper }}



            title:把值中的每个单词的首字母都转成大写;


            {{ 'hello' | title }}



            trim:把值的首尾空格去掉;


            {{ ' hello world ' | trim }}



            reverse:字符串回转;


            {{ 'olleh' | reverse }}



            format:格式化输出;


            {{ '%s is %d' | format('name',17) }}



            striptags:烘托之前把值中所有的HTML标签都删掉;


             

            {{ 'hello' | striptags }}



            支撑链式运用过滤器:


            {{ “ hello world “ | trim | upper }}



            列表过滤器:

            first:取第一个元素


            {{ [1,2,3,4,5,6] | first }}


            last:取最终一个元素


             

            {{ [1,2,3,4,5,6] | last }}


            length:获取列表长度


            {{ [1,2,3,4,5,6] | length }}


            sum:列表求和


             

            {{ [1,2,3,4,5,6] | sum }}


            sort:列表排序


            {{ [6,2,3,1,5,4] | sort }}



            自界说过滤器:

            方法一:

            经过add_template_filter (过滤器函数, 模板中运用的过滤器姓名)


            def filter_double_sort(ls):
            return ls[::2]
            app.add_template_filter(filter_double_sort,'double_2')


            方法二:

            经过装修器 app.template_filter (模板中运用的装修器姓名)


            @app.template_filter('db3')
            def filter_double_sort(ls):
            return ls[::-3]


            引进表单的拓宽


            运用Flask-下载章鱼app-小白学Flask——看看模板的那些事(一)WTF表单扩展,能够协助进行CSRF验证,协助咱们快速界说表单模板,并且能够协助咱们在视图中验证表的数据。


             pip install Flask-WTF


            咱们来看一下,没运用表单拓宽的时分是怎样去写表单的:


            #模板文件


            下载章鱼app-小白学Flask——看看模板的那些事(一)




            from flask import Flask,render_template,request
            @app.route('/login',methods=['GET','POST'])
            def login():
            if request.method == 'POST':
            username = request.form['username']
            password = request.form['password']
            print username,password
            return “success”
            else:
            return render_template(“login.html”)


            看着上面是不是有点苦逼,这么英俊潇洒的你怎样能这么难堪的写代码呢?

            运用表单承受并查验参数

            咱们接着来看一下运用了Flask-WTF拓宽之后:

            模板页:



            #设置csrf_token
            {{ form.csrf_token() }}
            {{ form.us.label }}

            {{ form.us }}


            {{ form.ps.label }}

            {{ form.ps }}


            {{ form.ps2.label }}

            {{ form.ps2 }}


            {{ form.submit() }}


            {% for x in get_flashed_messages() %}
            {{ x }}
            {% endfor %}


            视图函数:


            #coding=utf-8
            from flask import Flask,render_template, redirect,url_for,session,request,flash
            #导入wtf扩展的表单类
            from flask_wtf import FlaskForm
            #导入自界说表单需求的字段
            from wtforms import SubmitField,StringField,PasswordField
            #导入wtf扩展供给的表单验证器
            from wtforms.validators import DataRequired,EqualTo
            app = Flask(__name__)
            # 需求设置 SECRET_KEY 的装备参数
            app.config['SECRET_KEY']='1'
            #创立自界说表单类,文本字段、暗码字段、提交按钮
            class Login(FlaskForm):
            us = StringField(label=u'用户:',validators=[DataRequired()])
            ps = PasswordField(label=u'暗码',validators=[DataRequired(),EqualTo('ps2','err')])
            ps2 = PasswordField(label=u'承认暗码',validators=[DataRequired()])
            submit = SubmitField(u'提交')
            #界说根路由视图函数,生成表单目标,获取表单数据,进行表单数据验证
            @app.route('/',methods=['GET','POST'])
            def index():
            # 创立一个Login目标
            form = Login()
            if form.validate_on_submit():
            # 调用Login目标傍边的特点,并取其数值
            name = form.us.data
            pswd = form.ps.data
            pswd2 = form.ps2.data
            print(name,pswd,pswd2)
            # 重定向至login的装修器
            return redirect(url_for('login'))
            else:
            if request.method=='POST':
            flash(u'信息有误,请从头输入!')
            return render_template('index.html',form=form)
            if __name__ == '__main__':
            app.run(debug=True)


            这样一写感觉整个的逼格就提升了好几个层次。在表单拓宽傍边需求留意必须得设置SECRET_KEY的值,这个值随意你设置为多少(在前面的session傍边咱们也提到过SECRET_KEY)

            在上面的代码傍边,我把需求注释的当地全部都注释了,咱们能够细心去阅览一些注释。因为篇幅有限,这儿不对Flask-WTF的一些详细用法做论述。

            最终,我自己是一名从事了多年开发的Python老程序员,辞去职务现在在做自己的Python私家定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,能够送给每一位喜爱Python的小伙伴,想要获取的能够重视我的头条号并在后台私信我:01,即可免费获取。

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP