• 【Flask03】路由


    3.1 路由介绍

    修改【Flask02】中hello.py文件的代码,修改后如下所示:

    # coding: utf-8
    from flask import Flask
    app = Flask(__name__)
    
    # 如果访问/,返回 ‘这是首页’
    @app.route('/')
    def hello_world():
        return '这是首页'
    
    # 如果访问/hello,返回 Hello,World!
    @app.route('/hello')
    def hello():
        return 'Hello,World!'
    

    然后在终端执行相应命令启动服务:
    在这里插入图片描述
    访问地址 http://127.0.0.1:5000,浏览器页面会显示 ’这是首页‘;如果访问地址 http://127.0.0.1:5000/hello,浏览器页面会显示 Hello, World!。这样就实现了通过访问不同的 URL 地址从而响应不同的页面。

    3.2 变量规则

    为了给URL增加变量的部分,我们需要把一些特定的字段标记成*<变量名字>。这些特定的字段会作为参数传入函数中。当然也可以通过指定一个可选的转换器通过规则<converter:变量名>*将变量转换为特定的数据类型。在hello.py中添加如下代码:

    @app.route('/user/<username>')
    def show_user_profile(username):
        # 显示用户名
        return 'User {}'.format(username)
    

    当访问http://127.0.0.1:5000/user/啦啦啦时,页面显示为:User 啦啦啦

    @app.route('/post/<int:post_id>')
    def show_post(post_id):
        # 显示提交整型的用户"id"的结果,注意"int"是将输入的字符串形式转换为整型数据
        return 'Post {}'.format(post_id)
    

    当访问http://127.0.0.1:5000/post/3时,页面显示为:Post 3。这里说的int转换是指用户在浏览器地址栏上输入的都是字符串,但是在传递给 show_post 函数处理时已经被转换为了整型。

    @app.route('/path/<path:subpath>')
    def show_subpath(subpath):
        # 显示 /path/ 之后的路径名
        return 'Subpath {}'.format(subpath)
    

    当访问 http://127.0.0.1:5000/path/file/A/a.txt 时,页面显示为 Subpath file/A/a.txt。

    转换器的主要类型如下:(意思是说只能接收这个类型的数据)
    在这里插入图片描述
    重定向行为
    Flask的URL规则是基于Werkzeugrouting模块。该模块背后的思路是基于Apache和早期的HTTP服务器定下先例确保优雅和唯一的URL。在hello.py中添加如下代码:

    @app.route('/projects/')
    def projects():
        return 'The project page'
    
    @app.route('/about')
    def about():
        return 'The about page'
    

    这样会产生的结果是:当访问 http://127.0.0.1:5000/projects/ 时,页面会显示 The project page。当访问 http://127.0.0.1:5000/about 时,页面会显示 The about page;但是当访问 http://127.0.0.1:5000/about/ 时,页面就会报错 Not Found。

    原因是:当用户访问页面忘记结尾斜线时,这个行为允许关联的URL继续工作,并且与Apache和其他的服务器的行为一致,反之则不行,因此在代码的URL设置时斜线只能多写不能少写;另外,URL保持唯一,有助于避免搜索引擎索引同一页面两次。

    3.3 HTTP方法

    先来看几个常用的HTTP方法:

    GET:浏览器通知服务器只获取页面上的信息并且发送回来。这可能是最常用的方法
    HEAD:浏览器告诉服务器获取信息,但是只对头信息感兴趣,不需要整个页面的内容。应用应该处理起来像接收到一个GET请求,但是不传递实际内容。
    POST:浏览器通知服务器它要在URL上提交一些信息,服务器必须保证数据被存储且只存储一次,这是HTML表单通常发送数据到服务器的方法。(POST只会被触发一次)
    PUT:同POST类似,但是服务器可能出发了多次存储过程,多次覆盖掉旧值。
    DELETE:移除给定位置的信息。
    OPTIONS:给客户端提供一个快速的途径来指出这个URL支持哪些HTTP方法。

    HTTP有不同方法来访问URLs。默认情况下,路由只会相应GET请求,但是能通过给route()装饰器提供methods参数来改变。下面是一个例子:

    @app.route('/login',methods['GET','POST'])
    def login():
    	if request.method == 'POST':
    		do_the_login() # 如果是POST方法就执行登陆操作
    	else:
    		show_the_login_form() # 如果是GET方法就展示登陆表单
    

    3.3 构建URL

    可以使用*url_for()*方法去构建一个URL来匹配一个特定的函数。它接受函数名作为第一个参数,以及一些关键字参数,每一个关键字参数对应于URL规则的变量部分。未知变量部分被插入到URL中作为查询参数

    总结:路由还是挺有意思的,虽然现在稍微有点懵。简单来说的话,route装饰器就是用于把一个函数绑定到一个URL上。这个URL里边可以包含变量,这个变量又可作为这个函数的参数传进来。
    在实际操作中有时候会忘记把URL用单引号包起来,这个要注意。
    另外对HTTP的几种方法也有了大致的了解,重点是GET和POST请求,一种是直接请求页面,另一种是可用于提交表单,PUT是在POST基础上可触发多次存储过程。

  • 相关阅读:
    周星驰影片经典台词之《大话西游》
    周星驰影片经典台词之《唐伯虎点秋香》
    “喝酒脸红”并不是能喝酒的表现
    hereim_美句_2
    sql查询表N到M行的数据,查询表内最新标识列
    CSS半透明背景 文字不透明
    jquery最简单的右侧返回顶部代码(滚动才出现)
    大渝网招聘页面用到的 滚动后固定代码
    OFBiz应用https与http方式访问切换
    [ofbiz]解决load-demo花费过长时间的问题
  • 原文地址:https://www.cnblogs.com/mqjing/p/13629292.html
Copyright © 2020-2023  润新知