flask web 编程学习笔记2:框架


Flask使用jinja2 模版引擎,Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

'''
    Note2. Frameworks And Example.
'''
#
##########################################################
# 
#   Flask have web frameworks jinja2.Jinja2 include in 
# Flask, It is a model from django.
#
##########################################################
#
from flask import Flask, render_template, request
#
app = Flask(__name__)
# ...
#
#
# index.html like this: <h1>Hello World!</h1>
# 


@app.route('/')
def index():
    return render_template('index.html')
#
# user.html like this: <h1>Hello, {{ name }}!</h1>
#  


@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)
# more example like this:
#    <p>A value from a dictionary: {{ mydict['key'] }}.</p>
#    <p>A value from a list: {{ mylist[3] }}.</p>
#    <p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
#    <p>A value from an object's method: {{ myobj.somemethod() }}.</p>
# AND: 过滤器
#    Hello, {{ name|capitalize }}
#    |---------------------------------------------------------
#    |  过滤器名   |  说  明
#    |---------------------------------------------------------
#    | safe        | 渲染值时不转义
#    | capitalize  | 把值的首字母转换成大写,其他字母转换成小写
#    | lower       | 把值转换成小写形式
#    | upper       | 把值转换成大写形式
#    | title       | 把值中每个单词的首字母都转换成大写
#    | trim        | 把值的首尾空格去掉
#    | striptags   | 渲染之前把值中所有的HTML 标签都删掉
#    |---------------------------------------------------------
#     safe 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。
# 例如,如果一个变量的值为'<h1>Hello</h1>',Jinja2 会将其渲染成'&lt;h1&gt;Hello&lt;/
# h1&gt;',浏览器能显示这个h1 元素,但不会进行解释。很多情况下需要显示变量中存储
# 的HTML 代码,这时就可使用safe 过滤器。
# tell.html like this
# <html>
#   <body>
#       <!-- 变量测试 -->
#       <p>A value from a dictionary capitalize: {{ dict['key']|capitalize}}.</p>
#       <p>A value from a dictionary upper: {{ dict['key']|upper}}.</p>
#       <p>A value from a list: {{ list[1] }}.</p>
#       <p>A value from a dictionary safe: {{ dict['html'|safe] }}.</p>
#       <p>A value from a dictionary no safe: {{ dict['html'] }}.</p>
#       <p>A value from a list, with a variable index: {{ list[intvar] }}.</p>
#       <p>A value from a dictionary: {{ dict['key'] }}.</p>
#       <!-- 判断测试 -->
#       {% if user %}
#           Hello, {{ user }}!
#       {% else %}
#           Hello, Stranger!
#       {% endif %}
#       <!-- 循环测试 -->
#       <ul>
#           {% for comment in comments %}
#               <li>{{ comment }}</li>
#           {% endfor %}
#       </ul>
#       <!-- 宏测试 -->
#       {% macro render_comment(comment) %}
#           <li>{{ comment+'Marco' }}</li>
#       {% endmacro %}
#       <ul>
#           {% for comment in comments %}
#               {{ render_comment(comment) }}
#           {% endfor %}
#       </ul>
#   </body>
# </html>
#
# 为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:
# {% import 'macros.html' as macros %}
# <ul>
# {% for comment in comments %}
#   {{ macros.render_comment(comment) }}
# {% endfor %}
# </ul>
#
# 特别说明:
#     若是需要使用静态文件,图片,css等等,需要新建一个static的文件夹到代码目录,
# 然后采用相对路径的方式调用:"../static/img/xxx.jpg"
#


@app.route('/tell', methods=['GET', 'POST'])
def tell():
    mydict ={'key':"dict,hellworld","html":"<p> mm </p>"}
    mylist = ['list0','list,hellworld']
    myintvar = 0
    mcomments = ["hhhhh","ssssss","ddddddd"]
    #  可以用字典在装载所有变量,然后传递给函数。
    dict_tell = {
                'dict':mydict,
                'list':mylist,
                'intvar':myintvar,
                'comments':mcomments                
                } 

    if request.method == 'POST':
        print("Button POST !")
    '''
    return render_template('tell.html',dict=mydict,\
                                       list=mylist,\
                                       intvar=myintvar,\
                                       comments=mcomments)
     '''
    return render_template('tell.html',**dict_tell)
# 可以使用继承的方式。                                      
#
# base.html
#
# <html>
#	 <head>
#		 {% block head %}
#			 <title>
#				 {% block title %}{% endblock %}- My Application
#			 </title>
#		 {% endblock %}
#	 </head>
#	 <body>
#		 {% block body %}
#		 {% endblock %}
#	 </body>
# </html>
#
# extend.html
#
# {% extends "base.html" %}
# {% block title %}Index{% endblock %}
# {% block head %}
#   {{ super() }}
#   <style>
#   </style>
# {% endblock %}
# {% block body %}
#   <h1>Hello, World!</h1>
# {% endblock %}
#


@app.route('/extend')
def mextend():
    return render_template('extend.html')
#   
#
# app.run will run forever ,It can set some param to contorl run status.  
# 
if __name__ == '__main__':
    app.run(debug=True)

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/flask%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0-%e6%a1%86%e6%9e%b6.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注