Flask学习文档

1.对比Django

比较项 Django Flask 复杂度比较 说明
项目创建 Django需要用命令创建项目 Flask直接编写文件就可以运行 Django复杂 Django需要用命令创建项目是因为需要创建整个项目框架
路由 Django使用专门的urls.py Flask直接使用@app.route() Django笨重 Django类似Struct2的配置,Flask类似Spring的配置,Flask感觉更好
GET和POST request.GET['name']和request.POST['name'] request.args.get("name","")和request.form["q"] 差不多 Flask上格式不统一
Restful 使用django-restful框架 使用flask-restful框架 差不多 Flask使用方法flask-restfu使用类格式不统一;flask-restful需要注册参数
数据库操作 django集成了对数据库的操作 Flask没集成对数据库的操作要另行 差不多 django复杂很大程度来源于对于数据库的集成

Django继承了MVT和ORM,以及后台管理。

Flask两个主要核心应用是EWerkzeug和模板引擎jinja2。

扩展包

Flask Django
Flask-SQLalchemy 操作数据库 django-admin
Flask-migrate 管理迁移数据库 manage.py
Flask-Mail 邮件 orm模型
Flask-WTF 表单 admin
Flask-script 插入脚本 文件存储系统
Flask-OpenID 认证 用户认证系统
Flask-Login 认证用户状态
Flask-RESTful 开发REST API的工具
Flask-Bootstrap 集成前端Twiiter Bootstrap框架
Flask-Moment 本地化日期和时间

Django内容 Flsak都没有需要扩展包提供 框架核心 : Werkzerug + jinja2(轻)

2.安装

pip3 install flask

第一个项目

# --UTF-8--

-lv wq --

导入Flask类

from flask import Flask

Flask类接收一个参数name

app = Flask(name)

装饰器的作用是将路由映射到视图函数index

@app.route('/')
def index():
return "hello,world"

Flask 应用程序实例的run方法启动web服务器

if name == 'main':
app.run()

Flask对象的初始化参数

应用程序配置参数

app.run()运行参数

应用程序配置参数

Django将所有配置信息都放到了settings.py文件中,而Flask则不同。

Flask将配置信息保存到了app.config 属性中,该属性可以按照字典类型进行操作。

读取

from flask import Flask
app = Flask(name)
app.config.get(name)
app.config[name]

设置

1.从配置对象中加载

app.config.from_object(配置对象)

class DefaultConfig(object):
"""
默认配置
"""
SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'
app = Flask(name)
app.config.from_object(DefaultConfig)

@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return 'HELLO World'

应用场景,可以继承---------------------------------------

class DevelopmentConfig(DefaultConfig):
DEBUG=True

例子:

# --UTF-8--

-lv wq --

导入Flask类

from flask import Flask
class DefaultConfig(object):
"""默认配置"""
SECRET_KEY = 'CHDWDIJQIDQWDQW123DKWENFF33'

Flask类接收一个参数name

app = Flask(name)
app.config.from_object(DefaultConfig) #
装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
print(app.config['SECRET_KEY'])
return "hello,world"

Flask 应用程序实例的run方法启动web服务器

if name == 'main':
app.run()

2.从配置文件中加载

app.config.from_pyfile(配置文件)

新建一个配置文件setting.py

SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'

在Flask程序文件中

app = Flask(name
app.config.from_pyfile('setting.py')

@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return "hello world"

例子:

# --UTF-8--

-lv wq --

导入Flask类

from flask import Flask
app = Flask(name)
app.config.from_pyfile('settings.py')

装饰器的作用是将路由映射到视图函数index

@app.route('/')
def index():
print(app.config['SECRET_KEY'])
return "hello,world"

Flask 应用程序实例的run方法启动web服务器

if name == 'main':
app.run()

3.从环境变量中加载

Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为

app.config.from_envvar('环境变量名') # 环境变量值为配置文件的绝对路径 

先在终端中执行如下命令

export PROJECT_SETTING = '~/setting.py'

再运行代码

app = Flask(name)
app.config.from_envvar('PROJECT_SETTING',silent=True)

@app.route("/")
def index():
print(app.config['SECRET_KEY'])
return "hello world"
if name == 'main':
app.run(host="0.0.0.0",port=5000,debug=True) # 指定运行的主机IP端口和是否开启DEBUG

表示系统环境变量中没有设置相应值时是否抛出异常 False 表示不安静的处理,没有值时报错通知,默认为False,True 表示安静的处理,即时没有值也让Flask正常的运行下去

3.开发服务器启动方式

从1.0版本开始 不再需要在 代码中写 app.run()

使用命令 flask run

4.路由

@app.route("/login")
def view_func():
return "hello world"

1.查询路由信息

--命令行方式

flask routes

Endpoint Methods Rule


index GET /
static GET /static/

--在程序中获得

print(app.url_map)

也可以遍历路由信息

for rule in app.url_map-iter_rules():
print('name = {} path = {}'.format(rule.endpoint,rule.rule))

2.获取请求参数

from flask import request

属性 说明 类型
data 记录请求数据,并转换为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
coockies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的HTTP方法 GET/POST
url 记录请求的URL地址 String
files 记录请求上传的文件 *

5.请求钩子

请求钩子是通过装饰器的形式实现,Flask支持四种请求钩子:

before_first_request : 在处理第一个请求前运行。

before_request : 在每次请求前运行

after_request : 如果没有未处理的异常抛出,在每次请求后运行。

teatrdown_request : 在每次请求后运行,即使有未处理的异常抛出

6.JinJa2模板

http://docs.jinkan.org/docs/jinja2/

Flask使用Jinja2这个模板引擎来渲染模板。Jinja2能识别所有类型的变量,包括{}。 Jinja2模板引擎,Flask提供的render_template函数封装了该模板引擎,render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值

7.Web表单

web表单是web应用程序的基本功能

pip3 install Flask-WTF

WTForms支持的HTML标准字段

字段对象 说明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为datetime.date格式
DateTimeField 文本字段,值为datetime.datetime格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为True和False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文本上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

8.数据库

flask-sqlalchemy是一个简化了SQLAlchemy操作的flflask扩展。

1.安装服务端

sudo apt-get install mysql-server

2.安装客户端

sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

3.数据库的基本命令

登录数据库

mysql -u root -p

创建数据库,设定编码

create database <数据库名> charset=utf8;

显示所有数据库

show databases;

在Flask中使用mysql数据库,需要安装一个flask-sqlalchemy的扩展

pip install flask-sqlachemy

4.对比Django和Flask数据库设置

Django :

DATABASES = { 'default': { 'ENGINE': None, # 把默认的数据库连接至为None } }

Flask:

app.confifig['SQLALCHEMY_DATABASE_URI'] ="************"

5.数据库迁移

创建迁移仓库

python database.py db init

创建迁移脚本

#创建自动迁移脚本
python database.py db migrate -m 'initial migration'

更新数据库

python database.py db upgrade

回退数据库

python database.py db downgrade 版本号

9.蓝图

蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。

1.创建蓝图对象

#Blueprint必须指定两个参数,admin表示蓝图的名称,name表示蓝图 所在模块
admin = Blueprint('admin',name)

2.注册蓝图路由

@admin.route('/')
def admin_index():
return 'admin_index'

3.在程序实例注册路由

app.register_blueprint(admin,url_prefix='/admin')

实例:

from flask_restful import Api
api = Api()
def init_api(app): # 传进来的app要继承过数据库配置DbConfig
api.init_app(app)

api.add_resource(class, "")

10.单元测试

常用断言方法

assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass assertIsNotNone 存在,则pass

你可能感兴趣的:(Flask学习文档)