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 更加吻合
Flask的安装
pip3 install flask
快速开始
# 引入flask
from flask import Flask
# 实例化flask
app = Flask(__name__)
# 启动应用
app.run()
通过上面的代码即可启动一个flask
应用,试试在浏览器地址栏输入http://127.0.0.1:5000
,因为没有配置视图页面,所以你看到的404
页面,这个时候我们的应用已经运行起来了。
路由配置
Flask
中是通过装饰器实现路由的。
from flask import Flask
app = Flask(__name__)
# 配置路由
@app.route("/")
# 定义路由执行的方法
def index():
return "<h1>Flask</h1>"
app.run()
页面渲染
Flask
的方法默认不会加载,我们要手动加载需要的方法Flask
提供了render_template
方法用来渲染我们的视图模版页面。Flask
默认的模版文件名为templates
,我们先在根目录创建,并在里面创建login.html
文件,进行如下编辑。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>我是登录页面</h1>
</body>
</html>
下面我们通过路由来进行这个页面的渲染
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Flask</h1>"
@app.route("/login")
def login():
return render_template("login.html")
app.run()
重定向
使用redirect
方法实现页面视图的重定向
from flask import Flask, render_template, redirect
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Flask</h1>"
@app.route("/login")
def login():
return render_template("login.html")
# 这里是个重定向
@app.route("/redirect")
def rr():
return redirect('/login')
app.run()
启动配置
在run()
函数中添加以下方法,可以对启动项进行配置
- host 主机地址,默认127.0.0.1
- port 端口,默认 5000
- debug 是否开启debug,默认false
ps: 开启debug后,Flask服务会在文件修改过后,自动重启
# 引入flask
from flask import Flask
# 实例化flask
app = Flask(__name__)
# 启动应用
app.run(host="0.0.0.0", port=9527, debug=True)
Flask 常用库列表
flask-script
为Flask提供强大的命令行操作,与Django
shell类似。
flask-login
Flask user session
管理,提供诸如login_user
, logout_user
, login_required
, current_user
等功能,也是其他很多Flask库的基础。
flask-admin
为Flask应用提供操作简单且易于扩展的数据库管理界面,与Django
自带的数据库管理app类似。
Flask-WTF
Flask与WTForms
的集成,提供强大的Form
安全和校验机制,与Django
内置的Form
功能类似。
flask-principal
Flask
强大的权限管理机制,灵活性强,提供了一个权限管理的基础框架,是很多Flask权限相关扩展的基础。
flask-restful
一个强大的Flask RESTful
框架,简单好用。
flask-api
相当于Django REST Framework
的Flask版,是另一个强大的Flask RESTful
框架。
Flask-Mail
Flask-Mail
为Flask应用添加了SMTP
邮件发送功能
Flask-User
Flask-User
集成了用户管理相关功能,并允许对功能做定制性修改,其相关功能包括Register
, Confirm email
, Login
, Change username
, Change password
, Forgot password
等。
Flask-User
基于Flask-SQLAlchemy
,NoSQL
数据库无法使用。
flask-security
Flask-Security
让开发者能够很快的为应用添加常用的安全机制,其整合了Flask-Login
, Flask-Mail
, Flask-Principal
, Flask-Script
等应用。其安全机制包括:
- Session based authentication
- Role management
- Password encryption
- Basic HTTP authentication
- Token based authentication
- Token based account activation (optional)
- Token based password recovery / resetting (optional)
- User registration (optional)
- Login tracking (optional)
- JSON/Ajax Support
flask-babel
Flask国际化和本地化扩展,基于Babel
flask-locale
为Flask应用添加语言包,与flask-babel
类似。