何为框架
- 软件框架,为实现某个业界标准或者完成特别基本任务的软件组件规范,为了实现某个软件组建规范时,提供规范所要求之基础功能的软件产品。
- 框架的功能类似于基础设施,提供并实现最为基础的软件架构和体系,通常依据特定的框架实现更为复杂的业务逻辑。
- 框架——就是程序的骨架。
使用框架带来的好处
- 可重用
- 成熟,稳健
- 可扩展性良好
- 提高开发速度
Web框架
- Web应用框架是支持动态网站,网络应用程序的软件框架。
- Web框架的工作方式:接收HTTP请求并处理,分派代码,产生HTML,创建HTTP响应。
- Web框架通常包含了:URL路由,数据库挂你,模板引擎。
Web框架中的概念
- MVC(Model,View,Controller)
- ORM(Object-relational Mapping)
- URL Route
- Template
Python中的Web框架
- 大包大揽的Django
优点: 完美文档。 全套解决方案(Cache,Session,ORM…)
强大的URL路由配置 自助管理后台
缺点: 系统紧耦合 自带的ORM不够强大 Template比较弱 - 力求精简的web.py和Tornado
- 新生代的为框架Flask和Bottle
微框架优点: 聚焦在业务逻辑上 学习成本低 灵活性和伸缩性较强
微框架缺点: 很多逻辑要开发者操刀 安装很多模块会导致体积较大
Flask框架
sudo pip3 install flask
544kb左右大小,比较精简
- 保持核心简单,易于扩展
- 不包含数据库抽象层,表单验证,但可以添加扩展
- Flask是一个可扩展的框架
Flask例程
简单flask文件内包括static(存储静态资源文件)与templates(html网页文件)文件夹,以及主要执行url判断的主py文件。
HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Calculator</title>
</head>
<body>
<div align="center" style="margin-top:40px">
<img src="{{url_for('static',filename='add.png')}}" alt=""><br>
</div>
<div>
<div align="center" style="margin-top:60px">
<form name="forml" method="POST">
<input type="text" placeholder="加数" name="adder1" class="form-control" value="{{adder1}}">
+
<input type="text" placeholder="被加数" name="adder2" class="form-control" value="{{adder2}}">
=
<input type="text" placeholder="总数" name="sum" readonly="readonly" class="form-control" value="{{message}}">
<input type='submit' class="btn btn-lg btn-info" value="计算">
</form>
</div>
</div>
</body>
</html>
index.py代码文件
from flask import Flask
from flask import render_template
from flask import redirect
from flask import url_for
from flask import request
app = Flask(__name__)
@app.route("/")
def index():
return redirect(url_for('add'))
@app.route('/add',methods=['GET','POST'])
def add():
if request.method == "POST":
a = request.form['adder1']
b = request.form['adder2']
a = int(a)
b = int(b)
sum = a + b
return render_template('index.html',adder1=str(a),adder2=str(b),message=str(sum))
return render_template('index.html')
if __name__ == "__main__":
app.run(port=8081)