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()
方式一

相关文章: