Flask(2)

1、模板 - Templates
   1、什么是模板
     模板:模板是一个包含响应文本的文件(通常是html文件),在Flask 中就是允许响应给用户看的网页。
     该文件中允许包含"占位变量"来表示动态的内容,其具体值在请求中才能知道。"占位变量"最终会被真实的值所替换。
     模板最终也会被解析成字符串再响应给客户端,这一过程通常称为"渲染"。

Flask中的模板是依赖于 Jinja2 的模板系统
   2、模板的设置
     默认情况下,Flask会在程序文件夹中的 templates 的子文件夹中搜索模板。
     默认情况下,需要手动创建 templates 文件夹。   
   3、模板的渲染
     作用:在视图函数中,通过 return render_template()将模板文件(xx.html)渲染成字符串之后,再响应给客户端浏览器
     函数:render_template(‘xxx.html‘,arg1=value1,arg2=value2)
             ex:return render_template(‘xxx.html‘)
             参数1 : xxx.html ,要渲染给客户端的html模板文件
             参数2 ~ n :要传递给模板动态显示的变量占位符,如果没有动态的变量占位符,则可以省略
             返回值:字符串
   4、模板中的语法(重难点)
     1、变量
         变量是一种特殊的占位符,告诉模板引擎该位置的值是从渲染模板时的数据中获取出来的。
         1、在视图中 :
             @app.route(‘/‘)
             def index():
                 return render_template(‘xxx.html‘,变量1=值1,变量2=值2,..)
                     ex:return render_template(‘xxx.html‘,name=‘laowang‘,age=35)
                 name 和 age  就是要传递到 xxx.html 中的变量
         2、在模板中:
             {{变量名}}
             <h1>{{name}}</h1>
         练习:
             在 01-template.html基础上,完成下列效果显示:
             歌名 :《绿光》
             作词 : 宝强
             作曲 : 乃亮
             演唱 : 羽凡
     ----------------

书名 :《钢铁是咋练成的》
                 作者 : 奥斯特洛夫斯基
                 价格 : 32.5
                 出版社 :北京大学出版社
                 music=‘绿光‘
                 author=‘宝强‘
                 qu=‘乃亮‘
                 singer=‘羽凡‘
                 # locals():将当前函数内所有的局部变量封装成一个字典

print(locals())
                 return render_template(‘01-template.html‘,params=locals())
     -------------------------------------
     2、过滤器
         1、什么是过滤器
             过滤器是允许在变量输出显示之前改变变量的值
         2、语法
             {{变量|过滤器}}
             Jinja2 模板中常见过滤器:
             过滤器名            说明
             capitalize          首字符变大写,其他字符变小写
             lower               把值转换成小写
             upper               把值转换成大写
             title               把值中的每个单词的首字符变大写
             trim                去掉值两边的空格
     3、标签
         1、什么是标签
         每个标签表示的是不同的服务器端的功能
         2、常用标签
         1、if标签
             1、基本if结构
                 {% if 条件 %}
                 {% endif %}

2、if ... else ... 结构
                 {% if 条件 %}
                     满足条件时要运行的代码
                 {% else %}
                     不满足条件时要运行的代码
                 {% endif %}
             3、if ... elif ... elif ... else
                 {% if 条件1 %}
                     满足条件1,要运行的代码
                 {% elif 条件2 %}
                     满足条件2,要运行的代码
                 {% elif 条件3 %}
                     满足条件3,要运行的代码
                 {% else %}
                     以上条件都不满足的时候,要运行的代码
                 {% endif %}
         2、for 标签
             {% for 变量 in 元组|列表|字典 %}
             {% endfor %}
             在 Jinja2 模板的循环中,支持内部变量 - loop
             loop作用:记载当前循环中的一些相关信息
             loop 常用属性:   
                 1、index
                 用法:loop.index
                 作用:记录当前循环的次数,从1开始记录
                 2、index0
                 用法:loop.index0
                 作用:同上,从0开始记录
                 3、first
                 用法:loop.first
                 作用:值为True,则表示当前循环是第一次循环
                 4、last
                 用法:loop.last
                 作用:值为True,则表示当前循环是最后一次循环
         3、macro 标签 (宏)
             1、作用
                 相当于是在模板中声明函数
             2、语法
                 使用 {% macro %} 标签声明宏
                 <!-- 声明 -->
                 {% macro 名称(参数列表) %}
                     xxxx  xxxx
                 {% endmacro %}
                 <!-- 调用 -->
                 {{show(uname)}}
                 et:
                 <!-- 声明 -->
                 {% mscro show(str) %}
                     <h1>{{str}}</h1>
                 {% endmacro %}
            
                 <!-- 调用 -->
                 {{show(uname)}}
             3、在独立的文件中声明宏
                 为了方便重复使用,允许将宏放在单独的模板文件中声明定义
                 1、创建 macro.html 模板文件
                     作用:定义项目中要用到的所有的宏
                     ex:{% mscro show(str) %}
                         <h1>{{str}}</h1>
                     {% endmacro %}
                 2.在使用的网页中,导入 macro.html
                     {% import ‘macro.html‘ as macros %}       
         4、include 标签(模板的包含)
             作用:将其他的模板文件包含到当前的模板文件中。
             在多处重复使用的模板代码可以放在单独的文件中,可以被其他的模板所包含(引用)
             语法:{% include ‘xxx.html‘ %}
   5、静态文件处理
     1、什么是静态文件
         在Flask中不能与服务器动态交互的文件都是静态文件
         如:图片,css文件,js文件,音视频文件,...
             <img src="images/a.jpg">
             <link rel="" href="css/a.css">
             <script src="js/a.js"></script>
             <video src="mp4/a.mp4"></video>
             <audio src="music/a.mp3"></audio>
     2、静态文件的处理
         1、所有的静态文件必须放在名为 static 的目录中。static目录要放在项目的根目录处。
             结构:
             FlaskDemo02
                 run01.py
                 templates
                     01-xxx.html
                     02-xxx.html
                 static
                     images
                         a.jpg
                         b.jpg
                     js
                         body.js
                         slider.js
                     css
         2、所有的静态文件必须通过 /static/ 路径访问
             /static/images/a.jpg
             /static 要到静态资源目录中继续搜索
             ex:<img src="/static/资源路径">

-------------------------

作业:
     搭建 Blog 项目结构
     1.创建项目 - Blog
     2.将 所有的 html 文件 copy 到 templates 目录中作为模板
     3.创建 static 目录,将 js 目录,css目录,images目录 copy到 static 中
     4.创建 路由 /
         访问 根路径时,显示首页模板(index.html)
         要求:css,images,js 都能正常显示

反向解析:
             url_for(‘static‘,filename=‘<file_path>‘)
             <img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">

params = {
     ‘author‘: ‘奥斯特罗夫斯基‘,
     ‘dic‘: {‘WWC‘: ‘隔壁老王‘, ‘LZ‘: ‘吕泽‘, ‘WMZ‘: ‘老魏‘, ‘MM‘: ‘蒙蒙‘},
     ‘bookName‘: ‘钢铁是怎样炼成的‘,
     ‘tup‘: (‘水浒传‘, ‘三国演义‘, ‘红楼梦‘, ‘西游记‘),
     ‘price‘: 32.5,
     ‘list‘: [‘漩涡鸣人‘, ‘卡卡西‘, ‘自来也‘, ‘佐助‘],
     ‘person‘: <__main__.Person object at 0x7f157c2c9048>

}

params[‘author‘]

1、静态文件地址的反向解析:
     url_for(‘static‘,filename=‘<file_path>‘)
     ex:
         <img src="{{url_for(‘static‘,filename=‘images/b04.jpg‘)}}">
         结果:/static/images/b04.jpg

2、模板的继承
     1、什么是模板的继承
         模板的继承类似于类的继承,如果在一个模板中出现的大量内容是另外一个模板的话,那么就可以使用继承的方式来简化开发
     2、语法
         1、父模板
             需要定义出哪些内容在子模板中是可以被重写的
             {% block 块名 %}
                 父模板中正常显示的内容
             {% endblock %}
             block:
                 定义允许在子模板中被修改的内容
                 1、在父模板中是可以正常显示的,没有任何影响
                 2、在子模板中是可以被重写的
         2、子模板
             1、需要指定继承来自哪个父模板
                 使用 {% extends ‘父模板名称‘ %} 来完成继承
             2、重写父模板中对应内容
                 使用 {% block 块名 %} 来重写父模板中的同名内容
                 {% block 块名 %}
                     此处编写的内容会覆盖掉父模板中同名block的内容。
                     允许通过 {{super()}} 来调用父模板中的内容。
                 {% endblock %}
                     ex:
                     {% extends ‘02-parent.html‘ %}
                     {% block content %}
                         {{ super() }}
                         <h1 style="color: red;">这是child主体</h1>
                     {% endblock %}

3、修改配置
     1、构建Flask 应用允许的指定配置信息
     app = Flask(__name__,template_folder=‘muban‘,static_url_path=‘/s‘,static_folder=‘/sta‘)
         1.template_folder
             指定存放模板的文件夹名称(设置模板的保存路径)
         2.static_url_path
             访问静态资源的路径(设置静态文件的访问路径,即映射到WEB中的访问路径)
             http://localhost:5000/s/xxx  查找静态资源文件
         3.static_folder
             指定存放静态文件的目录名称(映射到项目中的目录名称)
             在项目的根目录中 ,有一个名为 sta 的目录用于存放静态文件。   
     2、启动程序的运行配置
         app.run(debug = True,port = 5555,host = ‘0.0.0.0‘)
         host : 指定访问地址,0.0.0.0 表示局域网内的任何机器都可以访问网站
         查看ip:ifconfig

原文地址:https://www.cnblogs.com/py321/p/9925769.html

时间: 2024-08-02 01:26:33

Flask(2)的相关文章

Python:hashlib加密模块,flask模块写登录接口

hashlib模块 主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式 import  hashlib m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象 m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密:用b给一个变量转换

flask 安装

flask官网 : http://docs.jinkan.org/docs/flask/installation.html (基本上就是按照官网思路一点一点来的) 1,安装easy_install: wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py 2,安装 virtualenv sudo easy_install virtualenv 3,因为报错,所以要升级Python至2.7 wget htt

flask蓝图的使用

首先,我对蓝图的理解相对通俗,就是觉得蓝图对于视图方法模块化.大项目协同开发过程中的一个很好的工具. 1.下图是我们通常情况下使用的项目组织结构 看一下视图方法: #views.py 1 from app import app 2 3 4 @app.route('/user/index') 5 def index(): 6 return 'user_index' 7 8 @app.route('/user/show') 9 def show(): 10 return 'user_show' 11

flask开发restful api

在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还不是很熟悉,我建议先到这个网站简单学习一下,非常非常简单.http://dormousehole.readthedocs.org/en/latest/ 一直想写一些特别的东西,能让大家学习讨论的东西.但目前网上的很多博客,老么就按照官方文档照本宣读,要么直接搬代码,什么都不说明.我写这个系列的博客,

怎么使用Python和Flask在Linux上创建应用

无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会,也是一个从零基础开始学习python开发(http://www.maiziedu.com/course/python/)的一个好机会,pyhon学起来很有趣且在实际的应用如yum包管理器中很有用. 给大家分享一个关于很赞的教程贴,本篇教程会带你使用python和一个称为flask的微型框架来构建一个简单的应用,来显示诸如每个进程的内存使用,CPU百分比之类有用的信息. 前置需求 Python基础.列表.类.函

flask技巧(不断更新)

flask获取真实ip if request.headers.getlist("X-Forwarded-For"):    ip = request.headers.getlist("X-Forwarded-For")[0]else:    ip = request.remote_addr 未完成

#SORA#flask实验

唉,最近熬夜看动漫,早上还测了个蛋疼的数学测验,我也是醉了,今天得早点睡. 实验目的:在flask应用中使用多个http头并借助PUT,POST提交数据 源代码: __author__ = 'hochikong' from flask import Flask,request from flask.ext.restful import Resource,Api,reqparse app = Flask(__name__) api = Api(app) todos = {'task':'get t

运维的我要学开发--Flask(1)

Flask默认使用的是Jinja2的模板引擎,下面将会介绍下Flask提供给模板的一些方法. #-*- coding: utf-8 -*- #导入一些函数 from flask import Flask from flask import render_template,g #创建一个app app = Flask(__name__) #创建一个装饰器 @app.route("/") @app.route("/index") def index(): string=

flask源代码笔记——应用启动

flask一个最简单的demo是: from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello, World!' if __name__ == '__main__': app.run() run()方法启动了应用,那么run()背后都调用哪些类.方法和函数呢? 将相关代码汇总起来,如下: def run(self, host='localhost', port=5000, **o

Python flask虚拟环境安装

1.安装virtualenv 2.在当前路径下创建文件夹,启动虚拟环境 3.在使用虚拟环境前需激活,前面出现(env说明在虚拟环境中).虚拟环境中默认安装了pip,所以直接pip安装flask 4.在虚拟路径下创建py文件测试,deactivate退出虚拟环境 #!/usr/bin/env python from flask import Flask app = Flask(__name__) @app.route('/') def hello_flask(): return "hello fl