一、路由设置的两种方法

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='https://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 """ # http://admin.api.com:5000/admin
@app.route("/admin", subdomain="admin")
def admin_index():
return "admin.your-domain.tld" # http://web.api.com:5000/
@app.route("/", subdomain="web")
def web_index():
return "web.your-domain.tld" # http://sdsdf.api.com:5000/
# http://sdfsdf.api.com:5000/
# http://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__) #
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
return func(*args, **kwargs) return inner #
class UserView(views.MethodView):
#
methods = ['GET']
decorators = [wrapper] def get(self, *args, **kwargs):
return 'GET' def post(self, *args, **kwargs):
return 'POST' #
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路由+视图补充的更多相关文章

  1. Flask路由&视图

    1 路由  1.1app.url_map 查看所有路由 from flask import Flask app = Flask(__name__) @app.route('/') def hello_ ...

  2. flask路由和视图和cookie

    什么是路由 """ 客户端(例如web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例. 程序实例需要知道对每个URL请求运行那些代码,所以 ...

  3. DRF 视图家族及路由层补充

    目录 视图家族 一.views视图类 1.APIView类 2.GenericAPIView类(generics中) 二.mixins类:视图辅助工具 1.RetrieveModelMixin 2.L ...

  4. Flask路由系统

    Flask路由系统 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 设置路由的两种方式 第一种: @app.route('/index') def index(): ...

  5. 一、Flask路由介绍

    Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是So ...

  6. Flask之视图(一)

    2.关于Flask 知识点 从Hello World开始 给路由传递参数 返回状态码 重定向 正则URL 设置cookie和获取cookie 扩展 上下文 请求钩子 Flask装饰器路由的实现 Fla ...

  7. Flask - 路由系统

    目录 Flask - 路由系统 @app.route()装饰器中的常用参数 methods : 当前 url 地址,允许访问的请求方式 endpoint:反向url地址,默认为视图函数名(url_fo ...

  8. Flask ——路由系统

    Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST" ...

  9. Laravel教程 二:路由,视图,控制器工作流程

    Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...

随机推荐

  1. P1084 骑士的工作

    题目描述 你作为一个村的村长,保卫村庄是理所当然的了.今天,村庄里来了一只恶龙,他有n个头,恶龙到处杀人放火.你着急了.不过天无绝人之路,现在来了一个骑士团.里面有m位成员,每个人都可以砍掉一个大小不 ...

  2. Roslyn 使用 Directory.Build.props 管理多个项目配置

    在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置 在我的 MVVM 框架需要三个不同的库,一个是 ...

  3. js的cookie操作及知识点详解

    <html> <head> <script type="text/javascript"> function getCookie(c_name) ...

  4. Linux 内核列举设备和驱动

    如果你在编写总线级别的代码, 你可能不得不对所有已经注册到你的总线的设备或驱动进 行一些操作. 它可能会诱惑人直接进入 bus_type 结构中的各种结构, 但是最好使用已经 提供的帮助函数. 为操作 ...

  5. FFT NTT 错误总结(持续更新)

    FFT NTT错误总结 1 处理\(r\)数组时忘记赋值 r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1)); 2 ...

  6. JMeter分布式负载测试(吞吐量控制器)

    在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划. 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载.这些网页包括: 主 ...

  7. WebGPU学习(十一):学习两个优化:“reuse render command buffer”和“dynamic uniform buffer offset”

    大家好,本文介绍了"reuse render command buffer"和"dynamic uniform buffer offset"这两个优化,以及Ch ...

  8. 使用windows api函数捕获SAP session的左下角消息句柄

    背景:SAP session的左下角消息非常有用,我们在做SAP的自动化脚本时可以设法读到这个消息的内容,作为程序后续动作的判断条件.如下图:        比如小爬之前给财务的同事制作了一个批量导出 ...

  9. 王雅超的学习笔记-大数据hadoop集群部署(七)

    MySQL的安装部署

  10. 利用Feed43为网站自制RSS源

    什么是RSS,它可以做什么 快2020年了,RSS日渐式微,我也是去年机缘巧合下才开始使用的,以前只是听说过.RSS,全称Really Simple Syndication,又称简易信息聚合(也叫聚合 ...