'''
app.py中的源码def route(self, rule, **options)
@app.route()路由参数使用:
1.第一个位置参数为路由分发的请求路径
①静态参数路由:/index / /base 等
②动态参数路由:/index/<name> 在路由中使用了<变量名>的路由称为动态路由,
动态路由参数<name>会接收字符串和数字类型,但在制定了int时会优先调用该视图
可以指定int型,如/index/<int:id>,在视图函数中必须有同名的形参来接收 2.methods=['GET','PosT']
2.1当前视图函数支持的请求方式(405当前请求方式不被允许),
2.2参数为可迭代对象,请求方式不区分大小写,不设置默认为GET 3.endpoint=''
3.1路由映射视图函数,endpoint不指定默认为视图函数名(view_func.__name__)
3.2项目中存储视图函数的view_funcs是以{endpoint:view_func}形式存储,因此视图函数不能同名,
3.3在使用自定义装饰器时注意指定唯一的endpoint,以避免在多个视图函数使用自定义装饰器时报错; 4.defaults={key:value}
默认参数设置,必须在视图函数中定义一个形参来接收 5.redirect_to=''
永久重定向(301或者308)
应用场景:用户之前收藏的是视图函数对应的路由地址,后来页面不在使用,换了新的路径,为了避免用户收藏的不能访问,因此设置永久重定向 6.strict_slashes=True/False
设置路由路径匹配是否为严格模式,默认不设置为严格路由匹配模式 7.补充小知识:
falsk中通过视图函数名反向解析请求路径:
①from flask import url_for
②url_for('函数名')==>当前视图函数对应的路由请求路径(具体见知识点6)
FBV:app.add_url_rule('/',endpoint='',view_func=func) CBV:app.sdd_url_rule('/',endpoint='',view_func=CLASS.as_view(name=''))
'''
from flask import Flask, render_template, request, session, redirect, url_for

app = Flask(__name__)
app.config['DEBUG'] = True
app.secret_key = 'werf23456' # 1.flaskl路由:
# 1.1静动态路由
@app.route('/index')
def index():
return f'静态路由请求!' # 1.2动态参数路由
# 1.2.1动态路由匹配变量
@app.route('/index/<name>') # http://192.168.16.14:9000/index/yang
def index2(name):
return f'当前请求的动态参数为:{name}' # 当前请求的动态参数为:yang # 1.2.2动态路由变量指定匹配
@app.route('/index/name=<name>') # http://192.168.16.14:9000/index/name=yang
def index3(name):
return f'当前请求的动态参数为:{name}' # 当前请求的动态参数name为:yang # 1.2.3动态路由整数变量匹配
@app.route('/index/<int:id>') # http://192.168.16.14:9000/index/1234
def index4(id):
return f'当前请求的页码为:{id}' # 当前请求页码为:1234 # 2.methods=[]支持的请求方式参数设置,不设置默认为GET
@app.route('/login', methods=['GET', 'PoSt']) # 请求参数设置不区分大小写,源码中自动进行了upper
def login():
if request.method == 'GET':
return render_template('login.html')
elif request.method == 'POST':
username = request.form.get('username')
pwd = request.form.get('pwd')
if username == 'yang' and pwd == '':
session['username'] = username
return 'login successed 200 ok!'
else:
return 'login failed!!!' # 3.endpoint=''路由映射视图函数
'''
自定义装饰器装饰多个视图函数时,如果在路由中没有指定唯一的endpoint,
则所有装饰的视图函数返回的都是装饰器中的inner函数,同名因此会报错
AssertionError: View function mapping is overwriting an existing endpoint function: inner
''' def auth(func):
def inner(*args, **kwargs):
if session.get('username'):
return func()
else:
return '未登录无权访问!' return inner @app.route('/data1', endpoint='data1')
@auth
def data1():
return '您已登录成功,通过路径/data1来到当前页面!' @app.route('/data2', endpoint='data2')
@auth
def data2():
return '您已登录成功,通过路径/data2来到当前页面!' # 4.defaults={key:value}默认参数
@app.route('/key', defaults={'id': 23})
def key(id):
return f'路由设置的默认参数值为:{id}' # 5.redirect_to=''永久重定向(301或者308状态码)
@app.route('/admin', redirect_to='/redirect')
def admin():
return '原页面' @app.route('/redirect')
def redi():
return '访问/admin永久重定向的新页面!' # 6.strict_slashes=True/False 设置路由路径匹配是否为严格模式,默认不设置为严格路由匹配模式
#(对于在请求路径加了/的路径,在进行路由严格模式匹配时,如果在请求时未加/,flask会进行返回308加上/重定向) #6.1不设置strict_slashes默认未严格模式,在路由后边没有/s时,如果访问加上就会报错404
@app.route('/strict_true', strict_slashes=True)
def strict_true():
return f'严格模式匹配{url_for("strict_true")}' #6.2指定strict_slashes=False非严格模式时,,在路由后边加/依然可以正常映射
@app.route('/strict_false/', strict_slashes=False)
def strict_false():
return f'非严格模式路由匹配{url_for("strict_false")}' if __name__ == '__main__':
app.run('0.0.0.0', 9000)

flask之路由route的更多相关文章

  1. Flask之基于route装饰器的路由系统(源码阅读解析)

    一 路由系统 1. 在flask中配置URL和视图函数的路由时,首先需要在main.py中实例化一个app对象: from flask import Flask, render_template ap ...

  2. 源码解析flask的路由系统

    源码解析flask的路由系统 当我们新建一个flask项目时,pycharm通常已经为项目定义了一个基本路由 @app.route('/') def hello_world(): return 'He ...

  3. python框架之Flask(2)-路由和视图&Session

    路由和视图 这一波主要是通过看源码加深对 Flask 中路由和视图的了解,可以先回顾一下装饰器的知识:[装饰器函数与进阶] 路由设置的两种方式 # 示例代码 from flask import Fla ...

  4. Flask最强攻略 - 跟DragonFire学Flask - 第七篇 Flask 中路由系统

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

  5. Flask中路由系统、Flask的参数及app的配置

    @app.route('/', methods=['GET', 'POST']) 1. @app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route ...

  6. Flask中路由系统以及蓝图的使用

    一.Flask的路由系统 1.@app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route("/info", methods=[ ...

  7. 小白学flask之路由,反向路由,路由参数

    # -*- coding: utf-8 -*- from flask import Flask, request, url_for app = Flask(__name__) @app.route(& ...

  8. Flask 的路由系统 FBV 与 CBV

    Flask的路由系统 本质: 带参数的装饰器 传递函数后 执行 add_url_rule 方法 将 函数 和 url 封装到一个 Rule对象 将Rule对象 添加到 app.url_map(Map对 ...

  9. Flask的路由解读以及其配置

    from flask import Flask app =Flask(__name__) 一.配置 配置一共有四中方式 方法一: 只能设置以下两种属性 app.debug=True app.secre ...

随机推荐

  1. nginx 配置大吞吐量

    ng做反向代理服务是如果没有这两行配置吞吐量到8000-10000就上不去. proxy_http_version 1.1; # 后端配置支持HTTP1.1,必须配 proxy_set_header ...

  2. 学习笔记-CTF密码相关

    RSA共模攻击 RSA基本原理 ①  选择两个大的质数p和q,N=pq: ②  根据欧拉函数,求得r=(p-1)(q-1): ③  选一个小于r的整数e,求得e关于模r的模反元素d: ④  将p和q的 ...

  3. 如何给 Visual Studio 的输出程序添加版本信息

    出处:https://stackoverflow.com/questions/284258/how-do-i-set-the-version-information-for-an-existing-e ...

  4. opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现

    开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...

  5. spark系列-2、Spark 核心数据结构:弹性分布式数据集 RDD

    一.RDD(弹性分布式数据集) RDD 是 Spark 最核心的数据结构,RDD(Resilient Distributed Dataset)全称为弹性分布式数据集,是 Spark 对数据的核心抽象, ...

  6. Git经典学习指南

    https://www.liaoxuefeng.com/ 转载于:https://blog.51cto.com/4402071/1977945

  7. 【WPF学习】第六十八章 自定义绘图元素

    上一章分析了WPF元素的内部工作元素——允许每个元素插入到WPF布局系统的MeasureOverride()和ArrangeOverride()方法中.本章将进一步深入分析和研究元素如何渲染自身. 大 ...

  8. redis系列之2----详细讲解redis数据结构(内存模型)以及常用命令

    Redis数据类型 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多,常用的数据类型主要有五种:String.List.Hash.Set和Sor ...

  9. spring类型转换

    如果表单提交的时候,有的字段是字符串类型,但是后台接收到的时候是其他类型(比如日期类型),我们就可以使用类型转换来把字符串类型转换为需要的类型.当字符串类型和后台的日期类型匹配的时候,也可以不做转换, ...

  10. linux解压缩tar.gz文件

    1.解压缩命令 命令:tar -zxvf 文件名 -z 有gzip属性的 -x 解压 -v 显示所有过程 -f 要处理的文件名 2.压缩命令 命令: tar -zcxf 压缩后的文件名 要压缩的文件名 ...