Python Flask框架 入门详解与进阶

news2024/11/24 9:23:52

Python Flask框架 入门详解与进阶

  • 1.Flask框架 入门
  • 2.环境搭建
    • 2.1.安装flask
      • 1.创建虚拟环境
      • 2.激活虚拟环境
      • 3.安装flask
    • 2.2.flask程序编写
      • 1.创建test.py文件
      • 2.启动运行
    • 2.3.参数说明
      • 1.Flask对象的初始化参数
        • 第一种 :从配置对象中加载 app.config.from_object(DefaultConfig)
        • 第二种:从配置文件中加载
        • 第三种:从环境变量中加载
        • 项目中的常用方式
        • app.run 参数
    • 2.4开发服务器启动方式
      • 方式一:新式的终端运行
      • 方式二:Pycharm启动
  • 3.路由与蓝图
    • 路由
      • 3.1.查询路由信息
        • 方式1:命令行方式
        • 方式2:在程序读取路由信息
      • 3.2.指定请求方式

1.Flask框架 入门

flask是一个非常轻量化的后端框架,与django相比,它拥有更加简洁的框架。django功能全而强大,它内置了很多库包括路由,表单,模板,基本数据库管理等。flask框架只包含了两个核心库(Jinja2 模板引擎和 Werkzeug WSGI 工具集),需要什么库只需要外部引入即可,让开发者更随心所欲的开发应用
Flask文档
中文文档(http://docs.jinkan.org/docs/flask)
英文文档(http://flask.pocoo.org/docs/1.0/)

2.环境搭建

2.1.安装flask

1.创建虚拟环境

mkvirtualenv flask -p python3

2.激活虚拟环境

workon flask

3.安装flask

pip install flask

2.2.flask程序编写

1.创建test.py文件

# 导入Flask类
from flask import Flask

#Flask类接收一个参数__name__
app = Flask(__name__)

# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
    return 'Hello World'

# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

2.启动运行

python test.py

2.3.参数说明

1.Flask对象的初始化参数

Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块)

Flask 应用程序在创建的时候一些需要我们关注的参数:

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

默认参数情况

app = Flask(__name__)

文件目录
文件目录
访问http://127.0.0.1:5000/static/fu.png就可以访问到图片
完整参数情况下

# 导入Flask类
from flask import Flask

#Flask类接收一个参数__name__,static_url_path是静态文件访问路径,static_folder静态文件存储的文件夹
app = Flask(__name__, static_url_path='w',static_folder='static_file')

# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
    return 'Hello World'
    
if __name__ == '__main__':
    app.run()

文件目录
在这里插入图片描述

此时访问http://127.0.0.1:5000/w/IMG_5311.jpg,才可以访问到图片

2.应用程序配置参数

对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:
Flask从哪里读取静态文件,Flask从哪里读取模板文件

还需要应用程序配置参数设置的,是一个Web应用工程的相关信息,比如:
数据库的连接信息,日志的配置信息,自定义的配置信息

使用方式
Flask将配置信息保存到了app.config属性中
读取
app.config.get(name)
app.config[name]
设置

第一种 :从配置对象中加载 app.config.from_object(DefaultConfig)

test_config.py

# 导入Flask类
from flask import Flask

# 配置对象方式加载配置信息
class DefaultConfig(object):
    """
    默认配置信息
    """
    SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'

#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')

# 设置
app.config.from_object(DefaultConfig)

#定义视图
@app.route('/')
def index():
    # 读取配置信息
    print(app.config['SECRET_KEY'])
    return 'Hello World'

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

运行程序在后台就会打印出来 SECRET_KEY

第二种:从配置文件中加载

在当前目前创建一个setting.py文件,里面写入配置信息

SECRET_KEY = '我是配置文件信息'

test_config.py

# 导入Flask类
from flask import Flask

# 配置对象方式加载配置信息
class DefaultConfig(object):
    """
    默认配置信息
    """
    SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'

#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')

# 设置
# app.config.from_object(DefaultConfig)
app.config.from_pyfile('setting.py')

#定义视图
@app.route('/')
def index():
    # 读取配置信息
    print(app.config['SECRET_KEY'])
    return 'Hello World'

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

运行就会打印出配置文件的信息

第三种:从环境变量中加载

在Linux系统中设置和读取环境变量的方式
export 变量名=变量值  # 设置
echo $变量名  # 读取

# 例如
export MYCONFIG=python
echo $MYCONFIG

在windows系统里是
set 变量名=变量值

test_config.py

# 导入Flask类
from flask import Flask

# 配置对象方式加载配置信息
class DefaultConfig(object):
    """
    默认配置信息
    """
    SECRET_KEY = 'FDDKKKGFHFHRHNGGGKLTUIRKTKJBNSDFFFWET'

#Flask类接收一个参数__name__
app = Flask(__name__, static_url_path='/w', static_folder='static_file')

# 设置
# app.config.from_object(DefaultConfig)
# app.config.from_pyfile('setting.py')

 # silent=False 表示不安静的处理,没有值时报错通知,默认为False
 # silent=True 表示安静的处理,即使没有值也让Flask正常的运行下去
app.config.from_envvar('ENV_SETTING', silent=True)

#定义视图
@app.route('/')
def index():
    # 读取配置信息
    print(app.config['SECRET_KEY'])
    return 'Hello World'

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

Flask使用环境变量加载配置就是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
我用windows来演示

在这里插入图片描述
Pycharm设置环境变量
在这里插入图片描述

在这里插入图片描述

项目中的常用方式

  • app.config.from_object(配置对象)
    优点:继承,复用
    缺点:敏感信息暴露
  • app.config.from_pyfile(配置文件)
    优点:独立文件,保护敏感数据
    缺点:不能继承,文件路径固定不灵活
  • app.config.from_envvar(环境变量)
    优点:独立文件,保护敏感数据,文件路径不固定,灵活
    缺点:不方便,记得设置环境变量
from flask import Flask

def create_flask_app(config):
    """
    创建Flask应用
    :param config: 配置对象
    :return: Flask应用
    """
    app = Flask(__name__)
    app.config.from_object(config)

    # 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("ENV_SETTING", silent=True)
    return app

class DefaultConfig(object):
    """默认配置"""
    SECRET_KEY = 'abcdefg'

class DevelopmentConfig(DefaultConfig):
    DEBUG=True

# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)

@app.route("/")
def index():
    print(app.config['SECRET_KEY'])
    return "hello world"

app.run 参数

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

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

2.4开发服务器启动方式

方式一:新式的终端运行

hello.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"
export FLASK_APP=hello
flask run
Running on http://127.0.0.1:5000/
  • 环境变量 FLASK_APP 指明flask的启动实例

  • flask run -h 0.0.0.0 -p 8000 绑定地址 端口

  • flask run --help获取帮助

  • 生产模式与开发模式的控制
    通过FLASK_ENV环境变量指明
    export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
    export FLASK_ENV=development运行在开发模式

方式二:Pycharm启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.路由与蓝图

路由

3.1.查询路由信息

方式1:命令行方式

flask routes
Endpoint  Methods  Rule                       # Endpoint: 视图函数名字,Rule: 路径
--------  -------  -----------------------
index     GET      /
static    GET      /static/<path:filename>
  • 在程序中获取
print(app.url_map)

方式2:在程序读取路由信息

for rule in app.url_map.iter_rules():
    print('name={} path={}'.format(rule.endpoint, rule.rule))
    # iter_rules返回一个列表
    # rule.endpoint视图的名字
    # rule.rule视图的路径

以json的方式返回应用内的所有路由信息

 主视图,返回所有视图网址
    """
    rules_iterator = app.url_map.iter_rules()
    return json.dumps({rule.endpoint: rule.rule for rule in rules_iterator})
    # json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串

3.2.指定请求方式

  • GET
  • OPTIONS(自带) -> 简介版的GET请求,用于询问服务器接口信息
  • HEAD(自带)

cors跨域解决 ,前端访问后端接口时,先发一个options请求,后端允许请求,option是询问接口的特征的,不涉及真实的业务数据,比如接口的允许方式,允许的请求源头,然后浏览器发真才发真正的GET请求
那django-cors是在中间件中拦截处理了option请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chrome108 版本跨域问题

前言 近期&#xff0c;chrome又更新了&#xff0c;自动更新到了chrome的108.0.5359.95&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09;&#xff0c;更新到这个版本后&#xff0c;公司业务收到了一个故障&#xff0c;下面我们就来看看。背景&#xff1a; 客户…

Python——requests模块详解

1、模块说明 requests是使用Apache2 licensed 许可证的HTTP库。 用python编写。 比urllib2模块更简洁。 Request支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动响应内容的编码&#xff0c;支持国际化的URL和POS…

公众号查题系统

公众号查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转…

Unity计算着色器 02

序 在百度了一下显卡以后&#xff0c;总结的话就是这个图。 这个图再总结的话就是左下角的那个框子&#xff0c;一个任务可以分为若干个线程组&#xff0c;每个线程组包含若干个线程。 两个若干&#xff0c;可以看成是两个变量&#xff0c;而且是有关系的——它俩乘积是一个…

如何使用PowerShell脚本进行数字签名?

如何对PowerShell脚本进行数字签名以进行身份验证和保护的快速指南。 您是否希望确保您的脚本可以安全使用并且没有被篡改&#xff0c;从而伤害用户&#xff1f;如果是这种情况&#xff0c;那么您将需要使用由已知证书颁发机构&#xff08;如Sectigo、DigiCert&#xff09;提供…

简谈Spring Boot3.0升级后的踩坑之旅,另附解决方案!

注&#xff1a;本文基于 newbeemall 项目升级Spring Boot3.0踩坑总结而来。 一. 编译报错&#xff0c;import javax.servlet.*; 不存在 这个报错主要是Spring Boot3.0已经为所有依赖项从 Java EE 迁移到 Jakarta EE API&#xff0c;导致 servlet 包名的修改&#xff0c;Sprin…

写了30000字 用 shell 脚本做自动化测试实战项目(全面、完整)

前言 项目中有一个功能&#xff0c;需要监控本地文件系统的变更&#xff0c;例如文件的增、删、改名、文件数据变动等等。之前只在 windows 上有实现&#xff0c;采用的是 iocp ReadDirectoryChanges 方案&#xff0c;现在随着整个应用移植到 mac 上&#xff0c;需要对这一部…

大数据智能交通未来会是怎样的交通状况?

大数据智能交通未来会是怎样的交通状况&#xff1f;智能交通也是智慧城市的一个重要组成部分将会改变我们的交通&#xff0c;交通少不了大数据的处理&#xff0c;人工智能自动驾驶离不开大数据的支撑。 实现智能交通需要高效地从海量数据中分析、挖掘所需的信息和规律&#xf…

缺少微信小程序测试经验?这篇文章带你从0开始

微信小程序已经越来越普遍&#xff0c;但目前接触小程序的项目相对较少&#xff0c;对小程序的特性也不了解&#xff0c;缺少小程序测试实战经验。 本文主要通过对微信小程序特性和测试点进行总结&#xff0c;储备测试知识&#xff0c;提高测试效率。 小程序发布审核 发布前…

Linux jprobe的使用和原理

文章目录前言一、demo1.1 demo演示1.2 struct jprobe二、jprobe 原理2.1 原理简介1.2 原理详解三、源码解析3.1 struct jprobe3.2 register_jprobe3.3 setjmp_pre_handler3.4 jprobe_return3.5 longjmp_break_handler四、Deprecated Features五、使用 perf-probe 获取函数参数总…

CentOS7一键安装OpenStack

环境 CentOS 7 CPU核心数&#xff1a;2x2 RAM&#xff1a;8G DISK&#xff1a;60G 问题说明 在安装openstack过程中&#xff0c;一直卡在下面过程&#xff1a; Testing if puppet apply is finished: 192.168.100.132_controller.pp [ | ]等待一会儿之后会报各种不同的错误…

crontab 实现秒级定时任务的执行(学习笔记)

crontab 实现秒级定时任务的执行 传统暴力法 crontab -e ***** /usr/bin/curl 地址 ***** sleep 10; /usr/bin/curl 地址 ***** sleep 20; /usr/bin/curl 地址地址 ***** sleep 30; /usr/bin/curl 地址 ***** sleep 40; /usr/bin/curl 地址 ***** sleep 50; /usr/bin/cu…

进程和计划任务管理

查看进程信息 ps ps命令 查看静态的进程统计信息 ps -elf 查看进程信息 top top命令 查看动态的进程排名信息 top 查看进程信息 pgrep pgrep命令 根据特定条件查询进程 PID 信息 pgrep -l “log” pgrep -l -U teacher -t tty1 查看进程信息 pstree pstree命令 以树…

面试害怕考到JVM? 看这一篇就够了~

目录 前言 一、JVM内存划分 二、类加载 2.1、类加载是在干什么&#xff1f; 2.2、类加载的过程 2.3、何时触发类加载&#xff1f; 2.4、双亲委派模型&#xff08;重点考察&#xff09; 2.4.1、什么是双亲委派模型&#xff1f; 2.4.2、涉及到的类加载器 2.4.3、详细过…

【树莓派】raspberry pi控制超声波测距

目录一、超声波1、模块介绍2、工作原理二、gettimeofday函数三、树莓派控制超声波测距一、超声波 1、模块介绍 简介&#xff1a;   超声波传感器模块上面通常有两个超声波元器件&#xff0c;一个用于发射&#xff0c;一个用于接收。 硬件: 电路板上有4个引脚&#xff1a; …

测试面试被问“期望薪资多少”,不要傻傻直接报价,高情商都这样说

对于软件测试从业者而言&#xff0c;面试很重要&#xff0c;因为那是拿到薪资报酬丰厚程度的关键&#xff0c;你的理论及实操经验确实都很棒&#xff0c;那就尽量别让自己的面试表现拖自己的后腿&#xff0c;否则大概率会让你的薪水大打折扣。 你在面试中是否也遇到很多次以下…

38寻找二叉树的最近公共祖先39序列化和反序列化

38.寻找二叉树的最近公共祖先 这题和上一题的区别在于这不是二叉搜索树&#xff0c;无法根据值的大小来判断节点的位置&#xff0c;于是需要遍历 法1 递归写法 递归在左右子树寻找o1和o2 import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left …

12月编程语言排行榜公布啦~

2022年迎来了最后一个月&#xff0c;我们可以看到&#xff0c;在这一年中编程语言起起伏伏&#xff0c;有的语言始终炙手可热&#xff0c;而有的语言却逐渐“没落”...... 日前&#xff0c;全球知名TIOBE编程语言社区发布了12月编程语言排行榜&#xff0c;有哪些新变化&#x…

Test Squence测试过程中如何按照特定条件暂停或者停止仿真

在Simulink模型做Test Squence测试时&#xff0c;工程师有时候希望测试用例能按照自己期望的条件来停止或暂停仿真&#xff0c;这个期望的特定条件&#xff0c;可以是时间达到&#xff0c;也可以是任何能达到的特定状态。 具体实现方法如下&#xff1a; 1、在Test Harness测试…

公司 CTO:高性能开发,你不会 Netty,怎么好意思拿 20K?

主管&#xff1a;这个版块用 Netty 框架就可以了呀&#xff0c;不会吗&#xff1f; &#xff08;此时&#xff0c;公司 CTO 路过&#xff09; 某程序员&#xff1a;这个我真不会... 主管&#xff1a;好了好了&#xff0c;那这一块我交给别人去做&#xff0c;这个也不难啊&am…