如何通过Flask路由实现视图功能补充?

2026-06-11 05:542阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计770个文字,预计阅读时间需要4分钟。

如何通过Flask路由实现视图功能补充?

1. 路由设置有两种方法: - 使用装饰器 - 使用`app.route()`函数

2. 装饰器示例: python @app.route('/index/') def index(): return 'Hello World!'

3. 源码示例: python def route_decorator_add_url_rule(rule, endpoint, f, **options): def index(): return 'Hello World!' app.add_url_rule(rule, endpoint, f, **options)

一、路由设置的两种方法

1、装饰器

@app.route(‘/index/‘) def index(): return ‘Hello World!‘

2、源码

route->decorator->add_url_rule(rule, endpoint, f, **options)

def index(): return ‘Hello World!‘ app.add_url_rule(‘/index/‘, None, index)

注意:endpoint的值不能一致

二、参数

rule URL规则 view_func 视图函数名称 endpoint=None 名称,用于反向生成URL,即: url_for(‘名称‘) methods=None 允许的请求方式,如:["GET","POST"] strict_slashes=None 对URL最后的 / 符号是否严格要求, redirect_to=None 重定向到指定地址 defaults=None 默认值,当URL中无参数,函数需要参数时,使用defaults={‘k‘:‘v‘}为函数提供参数 subdomain=None, 子域名访问

endpoint、metods、前面有介绍

1、redirect_to 重定向

当访问rule时,重定向到目标网址

作用:网站升级维护时,用户通过此方法不用知道新网站的地址,就可以从旧网址跳到指定的网址

from flask import Flask app = Flask(__name__) @app.route(‘/index/‘, redirect_to=‘www.bootcss.com/‘) def index(): return ‘Hello World!‘ # app.add_url_rule(‘/index/‘, None, index) if __name__ == ‘__main__‘: app.run()

2、strict_slashes

strict_slashes=Flask # 对url最后一个斜杠要求不严

3、子域名(了解)

from flask import Flask app = Flask(import_name=__name__) app.config[‘SERVER_NAME‘] = ‘api.com:5000‘ """ 127.0.0.1 api.com 127.0.0.1 web.api.com 127.0.0.1 admin.api.com """ # admin.api.com:5000/admin @app.route("/admin", subdomain="admin") def admin_index(): return "admin.your-domain.tld" # web.api.com:5000/ @app.route("/", subdomain="web") def web_index(): return "web.your-domain.tld" # sdsdf.api.com:5000/ # sdfsdf.api.com:5000/ # asdf.api.com:5000/ @app.route("/dynamic", subdomain="<username>") def username_index(username): """Dynamic subdomains are also supported Try going to user1.your-domain.tld/dynamic""" return username + ".your-domain.tld" if __name__ == ‘__main__‘: app.run()

三、CBV(几乎不用)

from functools import wraps from flask import Flask, views app = Flask(__name__) # 4 def wrapper(func): @wraps(func) def inner(*args, **kwargs): return func(*args, **kwargs) return inner # 1 class UserView(views.MethodView): # 3 methods = [‘GET‘] decorators = [wrapper] def get(self, *args, **kwargs): return ‘GET‘ def post(self, *args, **kwargs): return ‘POST‘ # 2 app.add_url_rule(‘/user/‘, None, UserView.as_view(‘endpoint‘)) if __name__ == ‘__main__‘: app.run()

四、自定义正则

from flask import Flask,url_for from werkzeug.routing import BaseConverter app = Flask(__name__) # 步骤一:定制类 class RegexConverter(BaseConverter): """ 自定义URL匹配正则表达式 """ def __init__(self, map, regex): super(RegexConverter, self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配时,匹配成功后传递给视图函数中参数的值 :param value: :return: """ return int(value) def to_url(self, value): """ 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数 :param value: :return: """ val = super(RegexConverter, self).to_url(value) return val # 步骤二:添加到转换器 app.url_map.converters[‘reg‘] = RegexConverter """ 1. 用户发送请求 2. flask内部进行正则匹配 3. 调用to_python(正则匹配的结果)方法 4. to_python方法的返回值会交给视图函数的参数 """ # 步骤三:使用自定义正则 @app.route(‘/index/<reg("\d+"):nid>/‘) def index(nid): print(nid, type(nid)) # 4 <class ‘int‘> print(url_for(‘index‘, nid=110)) # /index/110/ return "index" if __name__ == ‘__main__‘: app.run()

如何通过Flask路由实现视图功能补充?
标签:两种

本文共计770个文字,预计阅读时间需要4分钟。

如何通过Flask路由实现视图功能补充?

1. 路由设置有两种方法: - 使用装饰器 - 使用`app.route()`函数

2. 装饰器示例: python @app.route('/index/') def index(): return 'Hello World!'

3. 源码示例: python def route_decorator_add_url_rule(rule, endpoint, f, **options): def index(): return 'Hello World!' app.add_url_rule(rule, endpoint, f, **options)

一、路由设置的两种方法

1、装饰器

@app.route(‘/index/‘) def index(): return ‘Hello World!‘

2、源码

route->decorator->add_url_rule(rule, endpoint, f, **options)

def index(): return ‘Hello World!‘ app.add_url_rule(‘/index/‘, None, index)

注意:endpoint的值不能一致

二、参数

rule URL规则 view_func 视图函数名称 endpoint=None 名称,用于反向生成URL,即: url_for(‘名称‘) methods=None 允许的请求方式,如:["GET","POST"] strict_slashes=None 对URL最后的 / 符号是否严格要求, redirect_to=None 重定向到指定地址 defaults=None 默认值,当URL中无参数,函数需要参数时,使用defaults={‘k‘:‘v‘}为函数提供参数 subdomain=None, 子域名访问

endpoint、metods、前面有介绍

1、redirect_to 重定向

当访问rule时,重定向到目标网址

作用:网站升级维护时,用户通过此方法不用知道新网站的地址,就可以从旧网址跳到指定的网址

from flask import Flask app = Flask(__name__) @app.route(‘/index/‘, redirect_to=‘www.bootcss.com/‘) def index(): return ‘Hello World!‘ # app.add_url_rule(‘/index/‘, None, index) if __name__ == ‘__main__‘: app.run()

2、strict_slashes

strict_slashes=Flask # 对url最后一个斜杠要求不严

3、子域名(了解)

from flask import Flask app = Flask(import_name=__name__) app.config[‘SERVER_NAME‘] = ‘api.com:5000‘ """ 127.0.0.1 api.com 127.0.0.1 web.api.com 127.0.0.1 admin.api.com """ # admin.api.com:5000/admin @app.route("/admin", subdomain="admin") def admin_index(): return "admin.your-domain.tld" # web.api.com:5000/ @app.route("/", subdomain="web") def web_index(): return "web.your-domain.tld" # sdsdf.api.com:5000/ # sdfsdf.api.com:5000/ # asdf.api.com:5000/ @app.route("/dynamic", subdomain="<username>") def username_index(username): """Dynamic subdomains are also supported Try going to user1.your-domain.tld/dynamic""" return username + ".your-domain.tld" if __name__ == ‘__main__‘: app.run()

三、CBV(几乎不用)

from functools import wraps from flask import Flask, views app = Flask(__name__) # 4 def wrapper(func): @wraps(func) def inner(*args, **kwargs): return func(*args, **kwargs) return inner # 1 class UserView(views.MethodView): # 3 methods = [‘GET‘] decorators = [wrapper] def get(self, *args, **kwargs): return ‘GET‘ def post(self, *args, **kwargs): return ‘POST‘ # 2 app.add_url_rule(‘/user/‘, None, UserView.as_view(‘endpoint‘)) if __name__ == ‘__main__‘: app.run()

四、自定义正则

from flask import Flask,url_for from werkzeug.routing import BaseConverter app = Flask(__name__) # 步骤一:定制类 class RegexConverter(BaseConverter): """ 自定义URL匹配正则表达式 """ def __init__(self, map, regex): super(RegexConverter, self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配时,匹配成功后传递给视图函数中参数的值 :param value: :return: """ return int(value) def to_url(self, value): """ 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数 :param value: :return: """ val = super(RegexConverter, self).to_url(value) return val # 步骤二:添加到转换器 app.url_map.converters[‘reg‘] = RegexConverter """ 1. 用户发送请求 2. flask内部进行正则匹配 3. 调用to_python(正则匹配的结果)方法 4. to_python方法的返回值会交给视图函数的参数 """ # 步骤三:使用自定义正则 @app.route(‘/index/<reg("\d+"):nid>/‘) def index(nid): print(nid, type(nid)) # 4 <class ‘int‘> print(url_for(‘index‘, nid=110)) # /index/110/ return "index" if __name__ == ‘__main__‘: app.run()

如何通过Flask路由实现视图功能补充?
标签:两种