Python Flask学习知识点(一)

简介: timg (5).jpg在此记录Python Flask学习过程中的知识点,易忘记点,中间也会记录一些小的Python技巧及知识。本文章根据慕课网七月老师的Python Flask高级编程课程,梳理课程中的知识点,供大家参考。
img_c34885770c56cdd62408151d9abddc87.jpe
timg (5).jpg

在此记录Python Flask学习过程中的知识点,易忘记点,中间也会记录一些小的Python技巧及知识。
本文章根据慕课网七月老师的Python Flask高级编程课程,梳理课程中的知识点,供大家参考。

MVC模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

"C"在其他语言中叫控制器,在flask中叫做视图函数
基于类的视图,在flask中又名即插视图

简单的flask demo,新建文件demo.py

import json

from flask import Flask

app = Flask(__name__)
@app.route("/hello/")
def hello():
    return "hello"

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True, port=81)

运行demo.py , 在浏览器中键入地址127.0.0.1:81/hello,可看到结果输出hello
上图代码中,定义了一个视图函数hello,并且在app.run设置为调试模式(debug)。
细心的同学可发现在试图函数上方的路由注册中明明是前后都有反斜杠@app.route("/hello/"),可为什么在浏览器输入127.0.0.1:81/hello不加后边的反斜杠就可以呢,是因为flask实质是把不带斜杠的url重定向到带斜杠的url上。
为什么flask要这么做?
唯一url原理便于SEO(搜索引擎优化),这里不讲SEO是什么,给出链接可自己查询

什么是SEO (搜索引擎优化)

Flask配置文件

在开发环境中,在生产线上的代码是绝对不允许使用debug模式的,而上图中的代码把debug硬编码在代码中,这种方法极其不合适,正确的做法应该写在配置文件中,这样我们只需要更改配置文件即可,不用改动代码。
新建文件config.py

DEBUG = True

更改demo.py文件

import json
from flask import Flask
app = Flask(__name__)

# 把自定义的config.py配置文件合并到flask配置文件中
app.config.from_object("config")

@app.route("/hello/")
def hello():
    return "hello"

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=app.config['DEBUG'], port=81)

flask配置文件中的变量要求全部大写,例如DEBUG = True

Flask路由注册

在Flask中有两种路由注册的方法,

  1. @app.route("/hello/")

  2. app.add_url_rule("/hello/", view_func=hello)

第一种是最为便捷的,采用python语言的装饰器来做路由注册,直接给视图函数增加装饰器即可。
第二种也可以达到路由注册的目的,view_func参数指定视图函数。

其实两种方式本质上都是通过app.add_url_rule("/hello/", view_func=hello)这种方式实现的,只不过第一种方法在装饰器内部Flask自己调用了app.add_url_rule("/hello/", view_func=hello),可查看app.py源码:

img_3c41316bfd14a20a3dc2bf921aaa9ed5.png
image.png

if name == "main"在Flask的含义

相信大家都知道if __name__ == "__main__"
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if name == 'main': 的作用就是控制这两种情况执行代码的过程,在if name == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

在Flask中,一般生产环境使用 nginx+uwsgi 作为 flask 自带的web服务器,使用if __name__ == "__main__"判断,避免在生产环境中启动flask自带的web服务器。

视图函数的返回值

通常Flask视图函数返回的都是response对象,
使用Flask的make_response方法制造response对象,

from flask import Flask, make_response
@app.route("/hello/")
def hello():
    headers = {
        "content-type": "text/plain"
    }
    response = make_response("<html></html>", 200)
    response.headers = headers
    return response

但是,
通常不需要上边make_response,直接:

@app.route("/hello/")
def hello():
    headers = {
        "content-type": "text/plain"
    }
    return "<html></html>", 200, headers

上边代码表示返回三个值,分别是一个<html></html>字符转,200状态码,和header
在python中如果return 多个值 视为返回一个元组,Flask会默认调用make_response来转换,本质还是通过make_response。
这里我们设置的200状态码和返回的内容无关,只是一个标识

另外,
web (视图函数)返回的本质都是字符串,通过content-type来控制返回的字符串转换为需要值,例如:
"contentType":"application/json" (转换为json返回)
"contentType": "text/plain" (转换为文本返回)
"contentType": "text/html" (转换为html返回)

以上内容如果对大家有帮助记得点个赞哦。感谢

目录
相关文章
|
1月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
292 0
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
161 1
|
1月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
248 1
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
135 4
|
2月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
4月前
|
算法 IDE 测试技术
python学习需要注意的事项
python学习需要注意的事项
266 57
|
4月前
|
JSON 数据安全/隐私保护 数据格式
拼多多批量下单软件,拼多多无限账号下单软件,python框架仅供学习参考
完整的拼多多自动化下单框架,包含登录、搜索商品、获取商品列表、下单等功能。
|
4月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
4月前
|
监控 数据安全/隐私保护 Python
微信自动抢红包免费版,2025微信抢红包神器,微信红包挂苹果版【python仅供学习】
这个模拟项目包含5个模块:核心监控逻辑、用户界面、配置管理、实用工具和主程序入口

推荐镜像

更多
下一篇
oss云网关配置