美文网首页
Flask之三:路由

Flask之三:路由

作者: 奇奇乌布里 | 来源:发表于2020-04-21 11:16 被阅读0次

路由 是什么鬼?非翻译专业的人翻译出来的东西确实可怕,Natural History给你翻译成 自然历史 ,教美国的 Nature History Museum自然历史博物馆)情何以堪。博物学就是博物学吧,什么自然历史。 路由也是,对应的英文是route,意思都跟way有关,这里是指: 用户访问的网址路径

所以 路由 可以理解为:根据访问路径作出的响应

路由要绑定响应函数,多对一可以,一对多要疯

这里的函数view function直译是视图函数,但是视图函数 你能看出来是什么意思吗?还不如叫响应函数来得直白通俗容易让人理解

# 一对一
@app.route('/')
def index():
    return "Hello World"

# 一对多(例如:为了兼容这样绑定,后面参数输不输都不会出错)
@app.route('/u/')
@app.route('/u/<int:id>/')
@app.route('/u/<int:id>/<newtitle>/')
def root_u(id=None, newtitle=''):
    if id:
        try:
            pass
        except Exception as e:
            pass
        else:
            pass
    else:
        pass
    return 'pass'
响应函数不能返回数字
@app.route('/')
def index():
    return "Hello World"  # ok

@app.route('/')
def index():
    return 555  # 错误:The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a int

abort可以终止相应函数执行

from flask import Flask, abort  # 导入abort

@app.route('/')
def root():
    abort(404)  # abort返回一个404标准错误代码,并停止root()函数
    return 'hello itcast',999  # abort后面的代码不会被执行
    # 主要用于异常的处理
路由要以斜线/开头,以斜线/结尾
@app.route('/')
@app.route('/watdee/')

'''
对于 @app.route('/watdee/') 这样的路由:
  访问 /watdee/ :成功
  访问 /watdee:自动转到 /watdee/,也成功
  
对于 @app.route('/watdee') 这样的路由:
  访问 /watdee:成功
  访问 /watdee/ :返回404错误

所以最好 以斜线开头,以斜线结尾!容错性好些!
'''
路由可以带变量,斜线后用尖括号括起来
@app.route('/hello/<username>')
def hello(username):
    return "Hello %s" % username
路由变量默认是字符串,可以设置成整数、小数、URL路径等
@app.route('/parames/<sid>/')  # 默认:字符串
@app.route('/parames/<int:sid>/')  # 只能输入正整数,如果不是,那么会返回404错误(Flask认为没有对应的路由)
@app.route('/parames/<float:weight>/')  # 只能输入正数,如果不是,那么会返回404错误(Flask认为没有对应的路由)
@app.route('/parames/<path:myroute>/') # 这个跟字符串的区别就是:字符串遇到/就停了,而路径会包含/
# 例1:
#   @app.route('/parames/<path:myroute>/')
#   实际访问: /parames/db/set/recreate/
#   myroute = db/set/recreate
# 例2:
#   @app.route('/parames/<myroute>/')
#   实际实际: /parames/db/set/recreate/
#   myroute = db

@app.route('/useuuid/<uuid:name>/')  # uuid服务器唯一ID

路由参数具体参考如下:

类型名 说明
string (default) accepts any text without a slash 不包括/
int accepts positive integers 正整数
float accepts positive floating point values 正数
path like string but also accepts slashes 含/的字符串
uuid accepts UUID strings
路由可以限制请求方法
@app.route('/', methods=['GET', 'POST'])
# 不设置的话默认只接受GET方法
Flask实例有一个属性:可以列示绑定的所有路由
app.url_map  # 蓝图无此属性,注意:这是个属性不是方法!尾巴不加()
路由 → endpoint → 响应函数
@app.route('/', endpoint='test')
# 路由可以自定义endpoint,用来区别不用py文件中同名的响应函数
# 如果不指定endpoint,则直接用【蓝图名.绑定的响应函数名】作为endpoint,在主py文件上的没有蓝图名,直接是【绑定的响应函数名】
# !!一般不自行指定!!
redirect可以实现路由跳转,而直接引用其他路由的响应函数则无路由跳转效果
# 1.路由跳转:路由由原来的 /url 变为 /g2
from flask import url_for, redirect

@fit.route('/g2')
def fitgn():
    return 'salut~~'


@fit.route('/url')
def fiturl():
    # url_for第一个参数是endpoint
    # 这里的endpoint是蓝图fit中的fitgn(这是蓝图里的代码)
    return redirect(url_for('fit.fitgn'))
# 此时浏览器中的url地址由原来的 /url 变为 /g2


# 2.路由不变(返回内容相同):此时路由仍为 /url 无变化
@fit.route('/g2')
def fitgn():
    return 'salut~~'


@fit.route('/url')
def fiturl():
    return fitgn()  # 直接引用路由[/g2]绑定是响应函数
# 此时路由仍为 /url 无变化,但是现实的是 /g2 绑定的响应函数的内容

自动创建的static路由使得通过URL直接访问静态资源成为现实

  • 在主py中,当Flask类实例化时,会自动创建一个神奇的路由/static/(具体名字在Flask实例化时有一个参数static_url_path可以指定,如果这里设置了例如a,则上面自动创建的路由也自动变成/a/了),访问这个路由可以按服务器上的真是文件名访问到static文件夹里的文件。
    • 也就是说,在默认情况下,如果把index.html放在static文件夹里,那么可以通过http://0.0.0.0:8080/static/index.html访问到这个网页(ip地址和port号要写自己服务器端实际值)。
  • 蓝图的情况也类似。在创建蓝图时,也会自动创建一个/static/的路由。假如一个蓝图的路由前缀是/bp1/,其static下也有个文件index2.html文件,则可以通过http://0.0.0.0:8080/bp1/static/index2.html访问到这个网页。

相关文章

  • Flask之三:路由

    路由 是什么鬼?非翻译专业的人翻译出来的东西确实可怕,Natural History给你翻译成 自然历史 ,教美国...

  • Python学习

    python-flask框架学习(二) 1、回顾Flask 2、Flask route路由 2.1、静态路由 ap...

  • 深入理解Flask路由的实现机制

    本篇介绍 Flask 路由的基本用法,并且通过部分源代码深入浅出阐述 Flask 路由的实现机制。 路由的基本用法...

  • Flask路由系统

    通常有3种定义路由函数的方法: 使用flask.Flask.route() 修饰器。 使用flask.Flask....

  • Sanic学习(二) - 基础

    路由 路由方面其实和flask很类似,flask不熟悉的话可以去看看我前面关于flask的基础教程 但是这里有一点...

  • Flask结合dropzone实现大文件分片传输

    upload.html flask后端路由

  • Python操作三大数据库(3)-实战Flask-ORM

    flask入门 安装 Flask 更多请查看 Flask帮助文档>> 快速入门 建立模型 建立Form验证 建立路由

  • 关于flask路由的思考

    flask路由 在使用flask时,我们设置路由的方式通常为: 问题来了, 我们并没有执行定义的函数,那么app....

  • Flask RESTFUL文档

    Flask文档 1. 快速入门(Quickstart) 1.1 最小的Flask应用 1.2 路由(Routing...

  • Flask教程

    Flask文档 1. 快速入门(Quickstart) 1.1 最小的Flask应用 1.2 路由(Routing...

网友评论

      本文标题:Flask之三:路由

      本文链接:https://www.haomeiwen.com/subject/mliyihtx.html