Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
flask是一个微框架,短小精悍,只保留核心的功能,可拓展性极强。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
Werkzeug模块使用实例
from werkzeug.wrappers import Request, Response
@Request.application
def hello(request):
return Response('Hello World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost', 4000, hello)
一、基本使用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'
if __name__ == '__main__':
app.run()
二、配置文件
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
{
'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
'TESTING': False, 是否开启测试模式
...
}
方式一:
app.config['DEBUG'] = True
PS: 由于config对象本质上是字典,所以还可以使用app.config.update(...)
方式二:
app.config.from_pyfile("python文件名称")
如:
settings.py
DEBUG = True
app.config.from_pyfile("settings.py")
app.config.from_envvar("环境变量名称")
环境变量的值为python文件名称, 内部调用from_pyfile方法
app.config.from_json("json文件名称")
必须是json格式,因为内部会执行json.loads
app.config.from_mapping({'DEBUG'L: True})
字典格式
app.config.from_object("python类或类的路径")
app.config.from_object('pro_flask.settings.TestingConfig')
settings.py
class Config(object):
DEBUG = False
TESTING = False
DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config):
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
PS: 从sys.path中已经存在路径开始写
PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录
外部文件中:k=v k要大写
# NAME='ctz'
# PWD='123'
class BaseConfig(object):
AA=123456
class TestConfig(BaseConfig):
DB='127.0.0.1'
class DevConfig(BaseConfig):
DB='127.0.0.2'
class ProConfig(BaseConfig):
DB='1270.0.0.3'
from flask import Flask
import settings
app=Flask(__name__)
#方式一
#app.config['COOK']='ctz'
'''
settings.py
NAME='ctz'
PWD='123'
'''
#方式二
#app.config.from_pyfile('settings.py')
#方式三
# import os
# os.environ['FLASK_SETTING']='settings.py'
# app.config.from_envvar('FLASK_SETTING')
#方式四(推荐使用)
app.config.from_object('settings.DevConfig')
@app.route('/index',methods=['POST','GET'],strict_slashes=False)
def index():
print(app.config)
return 'helloworld'
if __name__ == '__main__':
app.run(debug=True)
三、路由系统
@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('login', methods=['GET', 'POST'])
四、视图函数
1.fbv
from flask import Flask # 实例化Flask对象 app = Flask(__name__) # 生成路由关系,并把关系保存到app对象的 url_map字段中 @app.route('/xxxx') # @decorator def index(): return "Index" if __name__ == '__main__': # 启动程序,监听用户请求 # 一旦请求到来,执行 app.__call__方法 # 封装用户请求 # 进行路由匹配 app.run()