• Flask Web——URL与视图


    含参数列表的装饰器与视图函数

    创建flask项目后,会生成被@app.route()装饰的函数,被这个函数装饰的函数称为视图函数,它添加了访问URL的规则“/”,“/”代表网站的根路径,只要在浏览器中输入网站的域名,就可以访问到以“/”为路径的页面。

    @app.route('/')
    def hello_world():  # put application's code here
        return 'Hello hh!'
    
    • 1
    • 2
    • 3

    而此时hello_world函数什么也没做,只是简单地返回字符串“Hello hh!”,因此在浏览器,我们就可以看到“Hello hh!”。
    在这里插入图片描述

    定义URL

    • 定义不带参数的URL
      一个网站不可能只有主界面一个页面,以csdn为例,除了初始界面外,还有写文章的页面、浏览博文的页面等,因此需要定义许多不同的URL(路径),来满足不同页面的访问需求。URL分为两种,有参数的URL和无参数的URL,下面分别说明。
    @app.route('/profile')
    def profile():
        return "Welcome to my channel~"
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    👆此时,访问域名/profile,即可查看新定义的界面。注意,装饰器的URL设置为/profile,函数的名字不需要必须是profile。

    • 定义带参数的URL:带参数指的是视图函数包含参数。
    @app.route('/blog/')
    def blog_detail(blog_id):
        return "您查找的博客id为:%d" % blog_id
    
    • 1
    • 2
    • 3

    👆可以看到,URL中多了一对尖括号,并且尖括号中多了一个blog_id,这个blog_id就是传给视图函数的参数。当浏览器访问这个URL时,Flask会接收请求,并自动解析URL中的参数blog_id,把它传给视图函数blog_detail,在视图函数中,开发者可以根据blog_id从数据库中查找相应的博客数据返回给浏览器。此时,在浏览器中输入域名/blog/1,即可返回相应的视图。
    在这里插入图片描述
    注意,本书的作者使用的python版本为3.9,在书中视图函数的返回值为return "您查找的博客id为:" % blog_id,没有做类型匹配,这样做在我这里会报错。

    • any类型:参数可以从被选值中任取一个。此处放出书中的示例,即可读懂。
    @app.route('/blog/list/')
    def show_list(category):
        return "当前的博客分类为%s" % category
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    • 传递多个参数:URL中需要传递多个参数时,使用“/”隔开即可。
    @app.route('/blog//')
    def blog_detail(blog_id,page_id):
        return "您查找的博客id为%d, 页面为%d" % (blog_id,page_id)
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    • 同样,可以使用装饰器叠加的方式,当访问某个blog_id时,设置默认访问第一个页面(page_id设置默认参数为1)
    @app.route('/blog/')
    @app.route('/blog//')
    def blog_detail(blog_id,page_id=1):
        return "您查找的博客id为%d, 页面为%d" % (blog_id,page_id)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    • 使用传递字符串的方式传递参数
      在URL中传递参数,还可以通过传递字符串的方式,即在URL后面通过?把参数添加上去,如果有多个参数则通过&拼接,规则如下:
      URL?参数名1=参数值1&参数名2=参数值2
      此时,想要获取URL中的参数列表,需要flask库中的request来获取。
      在这里插入图片描述

    在URL中定义参数再传递参数比通过查询字符串的方式传递参数更有利于SEO的优化,能更好地被搜索引擎收录和检索。如CSDN博客网站的博客详情页面就是通过博客id在URL中定义参数再传递参数;而使用字符串查询更加灵活。

    页面重定向

    说白话就是实现页面的跳转。如,访问某个网站时,不允许直接进入主页,则会先自动跳转至登录页面登录,在flask中使用flask.redirect实现重定向,重要参数为location和code,location为重定向的URL,而code指状态码,默认为302(暂时重定向)。

    @app.route("/login")
    def login():
        return "login page"
    
    @app.route("/profile")
    def profile():
        name = request.args.get("name")
        if not name:
            return redirect("/login")
        else:
            return name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    直接登录到profile:
    在这里插入图片描述
    使用字符串搜索令name=admin登录到profile
    在这里插入图片描述

    动态构造URL

    上面实现的页面跳转登录,是直接把URL硬编码进去的,牺牲了一定的鲁棒性,更好的方式是通过url_for函数动态地构造url。url_for接收视图函数名作为第一个参数,以及其他URL定义时的参数,如果还添加了其他参数,将会添加到URL的后面作为查询字符串参数。

    @app.route("/blog/")
    def blog_detail(blog_id):
        return "您查找的博客id为: %s" % blog_id
    
    @app.route("/urlfor")
    def get_url_for():
        url = url_for("blog_detail",blog_id=2,user="admin")
        return url
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    实用篇-ES-RestClient操作文档
    每日学到 40
    2.6 场效应管放大电路
    Python中的Socket编程
    【LeetCode】双指针题解汇总
    python基于django的留学生服务管理平台
    Vue系列(一)之 Vue入门,Vue的生命周期以及前后端分离介绍
    Python写一个ERP系统和agent智能体协同仓库和订单的案例
    Flink1.15源码解析--启动TaskManager
    【020】基于Springboot+Vue的学生成绩教务管理系统(含教师、学生、管理员身份)含源码、数据库、运行教程
  • 原文地址:https://blog.csdn.net/fatfairyyy/article/details/126807651