Flask配置文件

 一、配置文件

settings.py:

class BaseConfig(object):
    DEBUG = False
    TESTING = False
    DATABASE_URI = 'sqlite://:memory:'


class ProductionConfig(BaseConfig):
    DATABASE_URI = 'mysql://user@pro/foo'


class DevelopmentConfig(BaseConfig):
    DATABASE_URI = 'mysql://user@dev/foo'


class TestingConfig(BaseConfig):
    DATABASE_URI = 'mysql://user@test/foo'

主文件引入配置文件:

from flask import Flask
app = Flask(__name__)
# 配置文件
app.config.from_object('settings.DevelopmentConfig')


@app.route('/index', methods=['GET', 'POST'])
def index():
    return '123'


if __name__ == '__main__':
    app.run()

 

二、路由

1、添加路由的两种方式,通常使用方式一

from flask import Flask
app = Flask(__name__)


# 路由方式一
@app.route('/index', methods=['GET', 'POST'])
def index():
    return 'index'


# 路由方式二
def order():
    return 'order'
app.add_url_rule('/order', view_func=order)


if __name__ == '__main__':
    app.run()

2、反向解析:

3、路由系统

@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'])

常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:

DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}

 

自定义转换器支持正则:

from flask import Flask, url_for
from werkzeug.routing import BaseConverter

app = Flask(import_name=__name__)


class RegexConverter(BaseConverter):
    """
    自定义URL匹配正则表达式
    """
    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex

    def to_python(self, value):
        """
        路由匹配时,匹配成功后传递给视图函数中参数的值
        """
        return int(value)

    def to_url(self, value):
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
        """
        val = super(RegexConverter, self).to_url(value)
        return val


# 添加到flask中
app.url_map.converters['regex'] = RegexConverter


@app.route('/index/<regex("\d+"):nid>')
def index(nid):
    print(nid)
    print(url_for('index', nid='888'))
    return 'Index'


if __name__ == '__main__':
    app.run()
View Code

 

posted @ 2020-03-31 21:43  TianShu  Views(61)  Comments(0Edit  收藏  举报