3- 路由

一. 路由的请求和响应过程:

  浏览器地址栏输入的网址: http://127.0.0.1:8080/index 请求服务器

          服务器访问 -> app.py -> 查找有没有这个 index路由  

          (1) 无: 浏览器提示无法访问此网站

          (2) 有: 执行路由匹配的函数 -> return "返回结果" -> response -> 客户端的浏览器

                                       

二. dd_url_rule 与 route() 装饰器的关系    

from flask import Flask
import settings

app = Flask(__name__)


app.config.from_object(settings)  # 加载配置文件

# 这个装饰器其实就是将route源码中的  rule字符串跟试图函数进行了绑定,通过add_url_rule()实现的绑定
@app.route('/')
def hello_world():
    return '---'



# add_url_rule实现路由绑定函数; 等价于 @app.route('/index')
def index():
    return "..."
app.add_url_rule("/index",view_func=index)

if __name__ == '__main__':

    app.run(port=8080)

三. 路由的变量规则

路由参数类型:

        string (缺省值)接受任何不包含斜杠的文本  *
        int   接受正整致   *
        float 接受正浮点数
        path  类似 string ,但可以包含斜杠
        uuid  接受 UUID 字符串

        

from flask import Flask

import settings

app = Flask(__name__)
app.config.from_object(settings)  # 加载配置文件

data = {"a": "北京", "b": "上海"}


@app.route('/')  # 定义路由
def hello_world():  # 视图函数
    return '我是首页'


@app.route('/city/')  # 就是一个变量名,默认是字符串类型
def get_city(key):  # 参数必填
    print(type(key))  # str
    return data.get("a")


@app.route("/add//")  # int 类型
def add(num, num2):
    result = num + num2
    return str(result)  # 不支持返回int类型


@app.route("/float/")  # float 类型
def fo(num):
    return str(num)


@app.route("/path/")  # path类型(变量:会变化的路径,默认str类型),
def all(pa):
    return (pa)


@app.route("/test/")  # uuid(通用唯一识别码);url中必须传递符合uuid格式的串
def test(num):
    # import uuid
    # uid=uuid.uuid4()
    # print(uid)
    print(type(num)) # uuid类型
    print(num)

    return "获取到唯一标识"


if __name__ == '__main__':
    app.run(port=8080)

         

四. 路由尾部定义 /

(1) 所有路由都是自上而下执行的,尽量在写路由的时候定义的路由是唯一的
(2) 路由结尾定义"/",无论请求中是否带了/,都可以执行视图函数
(3) 如果请求的结尾是有 "/", 浏览器相当于多请求了一次重定向

from flask import Flask

import settings

app = Flask(__name__)
app.config.from_object(settings)  # 加载配置文件


# 如果结尾带 "/", 访问时浏览器多请求了一次重定向
@app.route("/list/")
def data_list():
    return "我是列表"


# 如果没带/,如果请求中带了/,就会not found
@app.route('/index')
def hello_world():
    return '我是首页'


if __name__ == '__main__':
    app.run(port=8080)

 

你可能感兴趣的:(Flask,flask)