Flask简单使用

目录

前言

一、配置处理 

1. 内置配置值

2.配置方式

python文件配置

官方推荐

类配置

二、数据库使用

问题:

三、蓝图使用

1.创建蓝图

2.注册蓝图

四、启动


前言

Flask 是一个使用 Python 语言编写的 Web 框架,它可以让你高效的编写 Web 程序。

Flask 是典型的微框架,作为 Web 框架来说,它仅保留了核心功能:请求响应处理模板渲染。这两类功能分别由 Werkzeug(WSGI 工具库)完成和 Jinja(模板渲染库)完成,因为 Flask 包装了这两个依赖

推荐这本电子书作为入门教程 :Flask 入门教程 - HelloFlask ,也有一些内容直接引用的这里

个人喜欢多个文档对照看,所以还有一个教程: 欢迎进入Flask大型教程项目! — flask mega-tutorial 1.1 documentation

官网教程: Welcome to Flask — Flask Documentation (2.0.x)

flask一些插件教程: Python 中文学习大本营

一、配置处理 

为了设置 Flask、扩展或是我们程序本身的一些行为,我们需要设置和定义一些配置变量。Flask 提供了一个统一的接口来写入和获取这些配置变量:Flask.config 字典。配置变量的名称必须使用大写,写入配置的语句一般会放到扩展类实例化语句之前。

1. 内置配置值

Flask有两个配置值比较特殊: ENV 和 DEBUG, 这两个值要在应用启动前配置,启动后再进行配置的话,配置值会改变但实际上不会生效。

ENV : [ 'development',   'production'] , 默认值 : 'production'

这个值指定运行模式。

Flask官网特别指出生成环境下不要用 'development'模式

DEBUG: ['True', 'False'],  如果 ENV 为'development' 就是 True,否则为 False

这个值指 是否启用调试模式。

Flask官网特别指出生成环境下不要设置 DEBUG =True

ENV 使用环境变量 FLASK_ENV 来设置, 

DEBUG 使用环境变量FLASK_DEBUG来设置,

DEBUG 的值跟随 ENV 而改变, 一般不用特别设置

Bash
$ export FLASK_ENV=development
$ flask run



Fish
$ set -x FLASK_ENV development
$ flask run


CMD
> set FLASK_ENV=development
> flask run


Powershell
> $env:FLASK_ENV = "development"
> flask run

FLASK_ENV = "development" 代表 ENV = "development", DEBUG =True,

FLASK_ENV默认为"production",代表 ENV = "production", DEBUG =False,

其他配置值详见官网: Configuration Handling — Flask Documentation (2.0.x)

2.配置方式

配置方式有python文件配置,文件配置,环境变量配置等,这里介绍python文件配置

python文件配置

config包下config.py:

TEST_VALUE1 = 'config1'
TEST_VALUE2 = 'config2'

app.py

app = Flask(__name__)
app.config.from_object('config.config')

print(app.config)


<Config {'ENV': 'development', 'DEBUG': False, 'TESTING': False,....
TEST_VALUE1 = 'config1',
TEST_VALUE2 = 'config2'
}>

官方推荐

这是官方文档上的最佳实践,

在上面的基础上再新建一个配置文件(文件名和路径任意):

D:\git_project\graphcompute\config3.py:

TEST_VALUE2 = 'config33'

app.py:

app = Flask(__name__)
app.config.from_object('config.config')
app.config.from_envvar('MYRAPPLICATION_SETTINGS')
print(app.config)

设置环境变量再启动(环境变量名任意, 代码中指定就行) :

$env:MYRAPPLICATION_SETTINGS='D:\git_project\graphcompute\config3.py'
flask run

首先会从config包下config.py读取配置值:

TEST_VALUE1 = 'config1'
TEST_VALUE2 = 'config2'

然后会找到环境变量MYRAPPLICATION_SETTINGS,根据指定的文件再读取配置值:

TEST_VALUE2 = 'config33'

会覆盖掉同名变量值:

print(app.config)

<Config {'ENV': 'development', 'DEBUG': False, 'TESTING': False,....
TEST_VALUE1 = 'config1',
TEST_VALUE2 = 'config33'
}>

通过这种方法,在不同的环境可以根据环境变量的不同指定不同的配置文件
 

类配置

还有个类配置也是官方文档上的最佳实践

class Config(object):
    TESTING = False

class ProductionConfig(Config):
    DATABASE_URI = 'mysql://user@localhost/foo'

class DevelopmentConfig(Config):
    DATABASE_URI = "sqlite:tmp/foo.db"

class TestingConfig(Config):
    DATABASE_URI = 'sqlite:///:memory:'
    TESTING = True



要启用这样的配置,调用 from_object():

app.config.from_object('configmodule.ProductionConfig')

注意: from_object()不会去实例化对象。

如果需要实例化类(例如访问属性),则必须在调用 from_object() 之前执行此操作:

from configmodule import ProductionConfig
app.config.from_object(ProductionConfig())

详见官方文档

二、数据库使用

为了简化数据库操作,使用 SQLAlchemy——一个 Python 数据库工具(ORM,即对象关系映射)。借助 SQLAlchemy,可以通过定义 Python 类来表示数据库里的一张表(类属性表示表中的字段 / 列),通过对这个类进行各种操作来代替写 SQL 语句。这个类我们称之为模型类,类中的属性我们将称之为字段

Flask 有大量的第三方扩展,这些扩展可以简化和第三方库的集成工作。使用 Flask-SQLAlchemy 的官方扩展来集成 SQLAlchemy。

pip install flask-sqlalchemy

app.py:数据库配置

import os
import sys

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

WIN = sys.platform.startswith('win')
if WIN:  # 如果是 Windows 系统,使用三个斜线
    prefix = 'sqlite:///'
else:  # 否则使用四个斜线
    prefix = 'sqlite:'

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = prefix + os.path.join(app.root_path, 'data.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 关闭对模型修改的监控
# 在扩展类实例化前加载配置
db = SQLAlchemy(app)

SQLAlchemy(app) 会自动在app.config中读取所需的配置信息, 

所以也可以通过上一节的配置文件加载配置:

config.config.py:

SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://username:password@host:5432/msda'
SQLALCHEMY_POOL_SIZE = 3
SQLALCHEMY_POOL_RECYCLE = 900

app.py:

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config.config')


db = SQLAlchemy(app)


#或者
app = Flask(__name__)
app.config.from_object('config.config')


db = SQLAlchemy()
ab.init_app(app)

 sql执行:

result = db.session.execute("select * from table  where category = :par_1", {'par_1': 'xxx'})

print(result.fetchall()[0]['colum_name'])

sql对应文档:

Working with Transactions and the DBAPI — SQLAlchemy 1.4 Documentation

问题:

使用 postgresql 的时候,无法指定 schema,  在 SQLALCHEMY_DATABASE_URI 末尾添加 

'?search_path=xxx' 提示没有这个选项。

所以如果使用 sql查询数据需要在表名前面添加 schema名:

select * from  schema.table

如果使用了模型类,需要在类中指明 schema:

class AnalyseUsers(db.Model):
    # __tablename__ = 'analyse_users' 表名,可以不指定,自动解析类名
   
    
     # 指定 schema
     __table_args__ = {  
        'schema': 'msdap-etl'
    }
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(255))  # 用户名
    password = db.Column(db.String(255))  # 密码

三、蓝图使用

蓝图是一种组织一组相关视图和其他代码的方式。简单点说就是把一组接口统一管理。

1.创建蓝图

test_blueprint.py

from flask import Blueprint

from other_mode import get_data


# 蓝图对象
testapi= Blueprint('testapi', __name__, url_prefix='/testapi')



# 这个蓝图的接口定义一:
testapi.route('/', methods=['GET'])(index)
testapi.route('/show/get_data', methods=['GET'])(get_data)




# 这个蓝图的接口定义二:
@testapi.route('/show/get_data2', methods=['GET'])
def register():
    ...
    ...

2.注册蓝图

app.py

from test_blueprint import testapi


app = Flask(__name__)


app.register_blueprint(testapi)

注册完成后,调用接口 localhos:5000/testapi/  就是调用 蓝图testapi中第一个接口,

调用接口localhos:5000/testapi/show/get_data 就是调用 蓝图testapi中第二个接口。

简单的说就是在蓝图testapi 的所有接口前加上了testapi url_prefix 作为前缀。

四、启动

1.命令行启动

环境命令
Bash
$ export FLASK_APP=app
$ flask run
Fish
$ set -x FLASK_APP app
$ flask run
CMD
> set FLASK_APP=app
> flask run
Powershell
> $env:FLASK_APP = "app"
> flask run

 

 

 

 

  • 设置 FLASK_APP 环境变量来告诉终端要使用的应用程序, 我这里使用的文件是 app.py, 所以设置 FLASK_APP=app。
  • 文件名为 app.py 或者wsgi.py, 其实是不用设置 FLASK_APP 环境变量的,会自动查找
  • 如果启动文件使用的是 __init__.py,  FLASK_APP=pack_name (__init__.py 所在的包名

2.指定python解释器

直接使用 flask 命令是使用默认python解释器

如果需要用不同的python解释器去执行的话, 用  python -m flask 命令

例如我新下载了一个Anaconda3的解释器:

# 先移动到项目目录

cd xxx_project

# 执行命令

D:\work\Anaconda3\python.exe -m flask run

3.指定外部可见

默认运行服务器之后,只能从自己的计算机访问,而不能从网络中的任何其他计算机访问。通过添加 --host=0.0.0.0 到命令行使服务器公开可用:

$ flask run --host=0.0.0.0

4.Pycharm启动

 

 

其他命令行文档:

Command Line Interface — Flask Documentation (2.0.x)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值