通常有以下几种定义路由函数的方法:
成都创新互联公司服务项目包括南漳网站建设、南漳网站制作、南漳网页制作以及南漳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,南漳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到南漳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1.使用flask.Flask.route() 修饰器。
2.使用flask.Flask.add_url_rule()函数。
3.直接访问基于werkzeug路由系统的flask.Flask.url_map.
一 、让我们从最常用的@app.route()修饰器开始。
def route(self, rule, **options): def decorator(f): endpoint = options.pop('endpoint', None) self.add_url_rule(rule, endpoint, f, **options) return f return decorator
可以看到修饰器是对add_url_rule函数的包装,当我们写如下代码时:
@app.route('/index.html') def index(): return "Hello World!"
实际上上面的代码转换成:
def index(): return "Hello World!" index = app.route('/index.html')(index)
也就是,rule = '/index.html', options = { }, 执行decorator(index) 时会执行self.add_url_rule(rule, endpoint, f, **options)
二、下面回过头,来看看当Flask运行时,一个Request来了,会发生什么,仍然从Flask.wsgi_app开始阅读。
已经知道,当一个Request到来时,会首先push RequestContext和AppContext,在RequestContext中的init函数中有:
...self.url_adapter = app.create_url_adapter(self.request) ...self.match_request()
def create_url_adapter(self, request): if request is not None: return self.url_map.bind_to_environ(request.environ, server_name=self.config['SERVER_NAME']) ...
首先将Flask.url_map与当前到来的Request中environ进行绑定,获得一个url_adapter。
def match_request(self): try: url_rule, self.request.view_args = \ self.url_adapter.match(return_rule=True) self.request.url_rule = url_rule except HTTPException as e: self.request.routing_exception = e
获得url_adaptor之后,调用match_request,url_adapter.match()会返回一个元组view_args就是url_rule中的参数,比如Rule(/
在url_rule和view_args被装载到Request中后,我们继续对wsgi_app中的response = self.full_dispatch_request()这个过程与路由相关的内容进行分析。
def full_dispatch_request(self): self.try_trigger_before_first_request_functions() try: request_started.send(self) rv = self.preprocess_request() if rv is None: rv = self.dispatch_request() ...
dispatch_request()处理完毕,将返回值储存在rv变量中。通常,视图函数会return render_template(...). 返回值接下来经过一系列处理,发送到客户端。
当前文章:创新互联Python教程:flask怎么设置路由
文章位置:http://www.csdahua.cn/qtweb/news30/550280.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网