Flask的介绍
Flask 是python轻量级(微)的web开发框架,相比较django,flask并没有在功能上有所欠缺,只不过更多的选择交给了开发者,如果做一个简单的web开发,比如公司年会内部抽奖系统。假如使用django,那开发者不得不创建一个项目目录,创建一个app,进行settings配置…,但实际上,好多操作是冗余的。使用最少,最贴合项目的文件进行快速的开发,这个就是flask的优势。
Flask类似武侠小说当中的匕首,放在高手手里,很致命,但是如果放在正常人手里,只能削苹果。Flask如果是0基础的开发者,很容易手足无措。Flask的好多插件都是仿写django的。
Flask将众多配置文件,设置为默认值,初学者最好遵循这一惯例。
Flask的安装
Flask 在市场当中通常伴随着一个虚拟环境virtualenv,这个虚拟环境的优势:可以将python环境打包到一个目录下,同时上传git,稳定性弱于anaconda。在工作当中有使用,但是不多,我们在学习的时候,不用他(anaconda和virtualenv有冲突)。
使用anaconda环境使用flask
1,创建虚拟环境
conda create -n FlaskPath python=3.5.2
2,安装flask
activate FlaskPath ——》激活flask环境
pip install flask ——》安装
使用flask
from flask import Flask
app = Flask(__name__)# __name__当前文件
#methods 列表类型的参数,用来描述允许请求的方式,默认是get请求
@app.route('/index/',methods=['GET','POST']) #路由,相当于django的urls
def hello_word():
return 'hello world' # 返回一个文本,最好返回一个json或者HTML页面
if __name__ == '__main__': # 如果脚本自己运行
app.run(host='0.0.0.0',port=8000,debug=True)
#Host 主机
#port 端口
#debug 调试(True ,False)
Flask 原理
def __init__(
self,
import_name #实例名称
static_url_path=None, #静态文件路由 相当于 Django的 STATIC_URL
static_folder="static", #静态文件目录 相当与Django的 STATICFILES_DIRS
static_host=None, #静态文件根目录 相当与Django的 STATICFILES_ROOT
host_matching=False,
subdomain_matching=False,
template_folder="templates", #模板文件根目录 相当与Django的 TEMPLATES
instance_path=None,
instance_relative_config=False,
root_path=None,
):
Rule 路由规则:flask的路由必须以/开头
flask的模板系统
Flask 默认采用jinja2模块进行模板渲染,jinja2是python三方的一个模板渲染模块,通常用于flask,tornado框架或者自动化运维过程当中配置渲染(saltstack自动化监控模板就是用jinja2编写)。Jinja2的开发大量参照django的模板渲染系统,相似程度到达98%。
静态文件
静态文件,flask默认加载当前目录下的static目录下的静态文件
模板文件
模板文件,flask 默认加载当前目录下的templates目录下的模板文件
数据
使用列表或字典进行模仿,传递参数不用字典直接传参,用变量方式或者字典解包方式
视图+路由
from flask import Flask
from flask import render_template #最基础的模板加载方法
app = Flask(__name__)# __name__当前文件
@app.route('/student/',methods=['GET','POST'])
def student():
student_list = [
{'name':'小明', 'age':'19', 'score':'90'},
{'name':'小强', 'age':'18', 'score':'87'},
{'name':'小红', 'age':'17', 'score':'89'},
{'name':'小刚', 'age':'20', 'score':'88'},
{'name':'小微', 'age':'18', 'score':'87'},
{'name':'Tom', 'age':'18', 'score':'87'},
]
return render_template("student.html",student_list = student_list)
if __name__ == '__main__': # 如果脚本自己运行
app.run(host='0.0.0.0',port=8000,debug=True) #
前端渲染
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>成绩</th>
</tr>
</thead>
<tbody>
{% for student in student_list %}
<tr>
<td>{{ student.name.upper() }}</td>
<td>{{ student.age }}</td>
<td>{{ student.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>