什么叫Flask:Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。
Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点,优点是框架很轻量,更新时依赖少,并且专注安全方面的 bug,缺点是,你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表
django和Flask的比较:
(1)Flask
- Flask确实很“轻”,不愧是Micro Framework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过
- Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库
- 入门简单,即便没有多少web开发经验,也能很快做出网站
- 非常适用于小型网站
- 非常适用于开发web服务的API
- 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验
- 各方面性能均等于或优于Django
- Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方库
- Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不一
- Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django
- Flask比Django更加Pythonic,与Python的philosophy更加吻合
(2)django
- Django太重了,除了web框架,自带ORM和模板引擎,灵活和自由度不够高
- Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉
- Django的自带ORM非常优秀,综合评价略高于SQLAlchemy
- Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja
- Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山
- Django目前支持Jinja等非官方模板引擎
- Django自带的数据库管理app好评如潮
- Django非常适合企业级网站的开发:快速、靠谱、稳定
- Django成熟、稳定、完善,但相比于Flask,Django的整体生态相对封闭
- Django是Python web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植
- Django上手也比较容易,开发文档详细、完善,相关资料丰富
flask的安装:
- 创建虚拟环境:virtualenv –no-site-packages flaskenv
- cd flakenv
- cd Script
- 启动虚拟环境: activate
- 在虚拟环境中:pip intsall flask
第一个flask项目
- 项目目录结构
- flaskproject.py 文件
from flask import Flask, render_template
from flask_script import Manager
from App import create_app
app = create_app()
manager = Manager(app=app)
if __name__ == '__main__':
# 启动项目
# debug=True 表示启动debug调试,port='8000' 表示启用8000端口,默认是5000
# host='0.0.0.0' 表示所有都能访问
# app.run(debug=True, port='8000', host='0.0.0.0') # 第一种启动方法
manager.run() #第二种启动方法
- App里init.py文件,进行初始化
from flask import Flask
from App.views import blue
def create_app():
# 创建app,初始化,__name__主模块名或者包
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blue)
return app
- App里views.py文件(包含业务逻辑处理的方法)
from flask import render_template
import uuid
from flask import send_file
from flask import Blueprint
# 蓝图的作用: 管理路由(url)
# 初始化"蓝图"
blue = Blueprint('first', __name__)
# 只要用来处理业务逻辑
# 路由(127.0.0.1::5000)
@blue.route('/')
def hello_world():
# 视图函数
return 'Hello World!'
@blue.route('/hello/<name>/')
def hello_mian(name):
return 'hello %s' % (name)
@blue.route('/helloint/<int:id>/')
def hello_int(id):
return 'hello int:%s' % (id)
@blue.route('/index/')
def hello():
return send_file('../templates/hello.html')
@blue.route('/getfloat/<float:price>/')
def hello_float(price):
return 'float:%s' % (price)
@blue.route('/getstr/<string:name>/')
def hello_name(name):
return 'hello name:%s' % name
@blue.route('/getpath/<path:url_path>/')
def hello_path(url_path):
return 'path: %s' % url_path
@blue.route('/getuuid/')
def get_uuid():
a = uuid.uuid4()
return str(a)
@blue.route('/getbyuuid/<uuid:uu>/')
def hello_uuid(uu):
return 'uu:%s' % uu