首页 > 其他分享 > 【Flask框架】全知识点笔记4章60页MD文档,今日主题:flask视图和路由开发

【Flask框架】全知识点笔记4章60页MD文档,今日主题:flask视图和路由开发

时间:2023-11-03 18:31:40浏览次数:39  
标签:知识点 MD Flask app 视图 url user 路由

本文的主要内容:flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用:宏、继承/包含、模板中特有变量和函数、Flask-WTF 表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy、增删改查操作、案例、蓝图、单元测试

Flask整套笔记直接地址: 请移步这里


共 4 章,42 子模块,总计 29211 字


视图及路由

  • Flask简介
  • 虚拟环境
  • 路由的各种定义方式
  • 正则路由转换器
  • 请求参数
  • 状态保持
  • 上下文
  • Flask-Script

学习目标

  • 能够根据课件步骤安装虚拟环境
  • 能够创建 Py3 版本的虚拟环境
  • 能够使用 pip 命令安装指定版本 Flask 及其他扩展
  • 能够写出 Flask 从对象中加载配置的代码
  • 能够说出url_for的作用
  • 能够写出带有参数的路由及视图函数
  • 能够说出自定义转换器的步骤
  • 能够说出装饰器路由实现的几个关键的类
  • 能够说出实现 HTTP 状态保持的原理
  • 能够说出 Flask 各个上下文对象
  • 能够说出 Flask-Script 扩展的作用

相关配置参数

在上一节实现了一个最简单的 Flask 应用程序,只使用了7行代码,接来对 Flask 程序的创建,运行配置做进一步的了解,具体有:

  • Flask 程序初始化参数
  • Flask 程序相关配置加载方式
  • app.run() 参数

初始化参数

Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:

  • import_name
    • Flask程序所在的包(模块),传 __name__ 就可以
    • 其可以决定 Flask 在访问静态文件时查找的路径
  • static_path
    • 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
  • static_url_path
    • 静态文件访问路径,可以不传,默认为:/ + static_folder
  • static_folder
    • 静态文件存储的文件夹,可以不传,默认为 static
  • template_folder
    • 模板文件存储的文件夹,可以不传,默认为 templates

程序加载配置

在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:

  • 从配置对象中加载(常用)
    • app.config.from_object()
  • 从配置文件中加载
    • app.config.from_pyfile()
  • 从环境变量中加载(了解)
    • app.config.from_envvar()

以下演练以设置应用程序的 DEBUG(调试模式) 为例,设置应用为调式模式这后,可以实现以下功能:

1. 程序代码修改后可以自动重启服务器
2. 在服务器出现相关错误的时候可以直接将错误信息进行抛出到控制台打印

使用方式

配置对象
  • 从配置对象中加载,创建配置的类,代码如下:

    配置对象,里面定义需要给 APP 添加的一系列配置

    class Config(object): DEBUG = True

# 创建 Flask 类的对象,指向程序所在的包的名称




app = Flask(__name__)





# 从配置对象中加载配置




app.config.from_object(Config)

运行测试,在修改代码之后直接保存,会自动重启服务器

配置文件
  • 创建配置文件 config.ini,在配置文件中添加配置

  • 使用代码去加载配置

    创建 Flask 类的对象,指向程序所在的包的名称

    app = Flask(name)

    从配置文件中加载配置

    app.config.from_pyfile('config.ini')

环境变量(了解)
  • 编辑运行的相关配置

  • 使用代码去加载配置

    创建 Flask 类的对象,指向程序所在的包的名称

    app = Flask(name)

    加载指定环境变量名称所对应的相关配置

    app.config.from_envvar('FLASKCONFIG')

读取配置

  • app.config.get()
  • 在视图函数中使用 current_app.config.get()

注:Flask 应用程序将一些常用的配置设置成了应用程序对象的属性,也可以通过属性直接设置/某些配置:app.debug = True

app.run的参数

  • 可以指定运行的主机IP地址,端口,是否开启调试模式

    app.run(host="0.0.0.0", port=5000, debug = True)

[__](../shi-tu-ji-lu-you/lu-you-de- ge-zhong-ding-yi.html)

路由基本定义

  • 明确路由定义的参数,请求方式指定
  • PostMan 的使用

指定路由地址

# 指定访问路径为 demo1




@app.route('/demo1')
def demo1():
    return 'demo1'

给路由传参示例

有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。

# 路由传递参数




@app.route('/user/<user_id>')
def user_info(user_id):
    return 'hello %s' % user_id
  • 路由传递的参数默认当做 string 处理,也可以指定参数的类型

    路由传递参数

    @app.route('/user/int:user_id') def user_info(user_id): return 'hello %d' % user_id

这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数

指定请求方式

在 Flask 中,定义一个路由,默认的请求方式为:

  • GET
  • OPTIONS(自带)
  • HEAD(自带)

如果想添加请求方试,那么可以如下指定:


​ @app.route('/demo2', methods=['GET', 'POST']) ​ def demo2():

    # 直接从请求中取到请求方式并返回




    return request.method

demo2 请求方式为:

使用 PostMan 对请求进行测试

PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件,可以直接去对我们写出来的路由和视图函数进行调试,作为后端程序员是必须要知道的一个工具。

  • 安装方式1:去 Chrome 商店直接搜索 PostMan 扩展程序进行安装

  • 安装方式2:官网下载桌面版

  • 安装方式3:将已下载好的 PostMan 插件文件夹拖入到浏览器

    • 打开 Chrome 的扩展程序页面,打开 开发者模式 选项
    • 将插件文件夹拖入到浏览器(或者点击加载已解压的扩展程序选择文件夹)
      • 在 Mac 下生成桌面图标,可以点击启动
      • 在 ubuntu 旧版的 Chrome 浏览器中会显示以下效果,可以直接点击启动
  • 使用 PostMan,打开之后,会弹出注册页面,选择下方的 Skip this,go straight to the app 进行程序

[__](../shi-tu-ji-lu- you/shi-tu-chang-yong-luo-ji.html)

视图常用逻辑

  • 返回 JSON
  • 重定向
    • url_for
  • 自定义状态码

返回JSON

在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应

# 返回JSON




@app.route('/demo4')
def demo4():
    json_dict = {
        "user_id": 10,
        "user_name": "laowang"
    }
    return jsonify(json_dict)

不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content- type:application/json

重定向

  • 重定向到百度

    重定向

    @app.route('/demo5') def demo5(): return redirect('baidu')

  • 重定向到自己写的视图函数

    • 可以直接填写自己 url 路径
    • 也可以使用 url_for 生成指定视图函数所对应的 url

    @app.route('/demo1') def demo1(): return 'demo1'

    重定向

    @app.route('/demo5') def demo5(): return redirect(url_for('demo1'))

  • 重定向到带有参数的视图函数

    • 在 url_for 函数中传入参数

    路由传递参数

    @app.route('/user/int:user_id') def user_info(user_id): return 'hello %d' % user_id

    重定向

    @app.route('/demo5') def demo5():

    # 使用 url_for 生成指定视图函数所对应的 url
    
    
    
    
    return redirect(url_for('user_info', user_id=100))
    

自定义状态码

  • 在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666

    @app.route('/demo6') def demo6(): return '状态码为 666', 666

未完待续 下一期下一章

完整笔记请看文章开头

标签:知识点,MD,Flask,app,视图,url,user,路由
From: https://blog.51cto.com/u_13578013/8173617

相关文章

  • ensp实验,大一必学网工基础,数通HCIA内容,详细知识点集合
    1:交换机通信:两个pc端在一个网段内,不用单独配置交换机信息,不用设置网关地址,都能ping通2:路由器通信:Pc的网关地址是路由器的ip地址。路由器配置接口和地址Pc3pingpc4即可3:静态路由:静态路由配置好PC的ip地址、子网掩码、网关和路由器接口的地址信息。在R7路由器输入:[R7]iproute-stat......
  • mysql创建systemd管理项
    vim/usr/lib/systemd/system/mysqld.service写入system配置:[Unit]Description=MySQLServerDocumentation=mysqld##mysql参考手册Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-u......
  • 职场小白必备知识点-Wireshark使用技巧案例分析​
    Wireshark介绍Wireshark的使用比较灵活,打开wireshark后可以看到一个完整的开始界面,如下:Wireshark首页Wireshark工具栏1.1、选取抓包网卡在开始之前需要确定要在哪个网卡接口上抓包,有两种方式:1)、可以在首页中的“接口列表”选择2)、在快捷工具栏中点击红色框中的第一个按钮选择网......
  • 第五章知识点完整性总结
    第五章定时器及时钟服务本章讨论了定时器和定时器服务;介绍了硬件定时器的原理和基于Intelx86的PC中的硬件定时器;讲解了CPU操作和中断处理;描述了Linux中与定时器相关的系统调用、库函数和定时器服务命令;探讨了进程间隔定时器、定时器生成的信号硬件定时器定时器是由......
  • 是时候扔掉cmder, 换上Windows Terminal
    作为一个Windows的长期用户,一直没有给款好用的终端,知道遇到了cmder,它拯救一个习惯用Windows敲shell命令的人。不用跟我安利macOS真香!公司上班一直用macOS,一方面确实更加习惯windows下面学习,另一方面是上课需要WindowsQQ共享桌面。windowsTerminal1.0发布,那么是时候和cmder......
  • Golang中Defer知识点
    1:defer的执行顺序多个defer出现的时候,它是一个“栈”的关系,也就是先进后出。一个函数中,写在前面的defer会比写在后面的defer调用的晚packagemainimport"fmt"funcmain(){deferfunc1()deferfunc2()deferfunc3()}funcfunc1(){fmt.Println("A")......
  • [MDP.NetCore] 開發一個從GitHub持續佈署到Azure Container Apps的Web站台
    開發一個從GitHub持續佈署到AzureContainerApps的Web站台程式碼簽入GitHub之後,啟動GitHubAction流程,編譯並部署程式到AzureContainerApps,是開發系統時常見的功能需求。本篇範例協助開發人員使用GitHub與Azure,逐步完成必要的設計和實作。操作步驟1.註冊並登入AzurePortal......
  • JavaScript知识点
    new操作符1、创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型2、属性和方法被加入到this引用的对象中3、新创建的对象由this所引用,并且最后隐式的返回thisAjax原理1、Ajax的原理简单来说是在用户和服务器之间加了一个中间层(AJAX引擎),通过XmiHttpRequest对象来向服......
  • map知识点总结
    map是STL的一个关联容器,它提供一对一的hash(哈希表)第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部......
  • MacBooks打开当前文件夹的cmd终端
    1.打开系统偏好设置,并点击触控板 辅助点击选择点按右下角2.点击左上角访达,选择服务,点击服务偏好设置3.给“新建位于文件夹位置的终端标签页”和“新建位于文件夹位置的终端窗口”钩上选项 这样就可以在你想打开终端的文件夹,使用鼠标右键,打开终端了......