Flask是Python一个轻量级的Web应用框架,适合一些分层比较少,开发成本低,逻辑不怎么复杂的web项目。
pip下载Flask包后,再使用pycharm创建项目时选择flask可以生成架构。
架构包含 :
- 存放html模板的文件夹(默认为templates)
- 存放静态文件资源的文件夹(默认为static)
- 项目程序文件(默认为run.py)
路由及配置
项目自动生成的run.py文件。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
- 配置项
app = Flask(__name__)
以默认选项配置相关路径,如有需求可使用参数指定特殊路径:
app=Flask(__name__,
template_folder='./templates',
static_folder='./static',
static_url_path='./templates'
)
template_folder : 指定存放html模板的文件夹(默认为templates)
static_folder : 指定存放静态文件资源的文件夹(默认为static)
static_url_path : 指定静态文件的访问路径(默认为static)
- 路由
@app.route('/')
根据相对路径访问特定代码段及HTML文件。
例如:
#通过访问路劲获取字符串参数
@app.route('/user/<name>')
def welcome(name):
return '你好,%s。'%name
运行run.py
后即可通过在浏览器输入http://127.0.0.1:5000/user/lilei
访问welcome
函数,在网页上显示‘你好,lilei。’
- 运行
[[Flask app.run参数]]
app.run()
运行程序。
指定参数运行程序:
app.run(debug=True,
host='192.168.1.10',
port='5050',
threaded=True
)
debug:指定开启debug模式。
host:指定访问主机的Ip。
port:指定主机访问端口。
threaded:指定开启多线程。
模板template
使用flask模块的render_template对’/templates’文件夹下的’tasks.html’进行渲染。
render_template支持参数的传入及对html文件内的python语句进行解析。
如下,在run.py定义三个参数time、name、task,将三个参数传给task.html,并通过render_template解析参数并返回html渲染结果:
from flask import render_template
from datetime import date
@app.route('/tasks')
def task():
time = date.today() #普通变量
names = ['小张','小王','小李']#列表类型
tasks = {'任务':'打扫卫生','时间':'3小时'}
return render_template('tasks.html',day=time,users=names,tasks=tasks)
render_template通过{{变量名}}访问变量,通过{%for/if%}和{%endfor/endif%}进行遍历/判断,通过’|过滤器(参数)'对参数进行处理。
tasks.html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
今天是{{day}},欢迎光临。
今天值班的有:<br/>
<!--用大括号和百分号括起来的是控制结构,还有if语句-->
{% for user in names %}
<li> {{user}} </li>
{% endfor%}
任务:<br/> <!--如何在页面打印表格,以及如何迭代-->
<table border="1">
{% if tasks['时间']==day|string %}
{% for key,value in tasks.items()%}
<tr>
<td>{{key}}</td>
<td>{{value}}</td>
</tr>
{% endfor%}
{% else %}
<tr>
<td>今日空闲</td>
</tr>
{% endif %}
</table>
</body>
</html>
常见过滤器:
常见的过滤器有:
- capitalize 首字符变大写,其他变小写
- lower 将值转换为小写
- upper 将值转换为大写
- title 将值中的每个单词首字符变大写
- trim 去掉值两端的空格
- default(‘xx’) 如果变量不存在,将采用default中的值作为默认输出
- truncate(num[,bool]) 截取指定长度字符串,后面使用…显示
常见的逻辑语句
- if … else 结构
{% if 条件 %} … {% else %} … {% endif %} - for循环结构
{% for 变量 in 元组|列表|字典 %} … {% endfor %}