python-flask-route

来源:互联网 发布:一元微信提现赚钱软件 编辑:程序博客网 时间:2024/06/05 23:49

1. add_url_rule

def add_url_rule(self, rule, endpoint, **options):        options['endpoint'] = endpoint        options.setdefault('methods', ('GET',))        self.url_map.add(Rule(rule, **options))

2. route

def route(self, rule, **options):    def decorator(f):        self.add_url_rule(rule, f.__name__, **options)        self.view_functions[f.__name__] = f        return f    return decorator

3. url_map 和 view_function

from werkzeug.routing import Mapclass Flask(object):    def __init__(self, package_name):        ...        self.view_functions = {}        self.url_map = Map()        ...

4. Rule类

class Rule(RuleFactory):    def __init__(self, string, defaults=None,subdomain=None, methods=None, build_only=False, endpoint=None, strict_slashes=None, redirect_to=None, alias=False, host=None):        if not string.startswith('/'):            raise ValueError('urls must start with a leading slash')        self.rule = string        self.is_leaf = not string.endswith('/')        self.map = None        self.strict_slashes = strict_slashes        self.subdomain = subdomain        self.host = host        self.defaults = defaults        self.build_only = build_only        self.alias = alias        if methods is None:            self.methods = None        else:            self.methods = set([x.upper() for x in methods])            if 'HEAD' not in self.methods and 'GET' in self.methods:                self.methods.add('HEAD')        self.endpoint = endpoint        self.redirect_to = redirect_to        if defaults:            self.arguments = set(map(str, defaults))        else:            self.arguments = set()        self._trace = self._converters = self._regex = self._weights = Nonclass 

5. Map类

Map(object):    default_converters = ImmutableDict(DEFAULT_CONVERTERS)    def __init__(self, rules=None, default_subdomain='', charset='utf-8', redirect_defaults=True, converters=None, sort_parameters=False, sort_key=None, encoding_errors='replace', host_matching=False):        self._rules = []        self._rules_by_endpoint = {}        self._remap = True        self._remap_lock = Lock()        ...    def add(self, rulefactory):        for rule in rulefactory.get_rules(self):            rule.bind(self)            self._rules.append(rule)            self._rules_by_endpoint.setdefault(rule.endpoint, []).append(rule)        self._remap = True

route —–> add_url_rule/view_functions —–> Rule —–> url_map_add

原创粉丝点击