当前位置: 首页 > news >正文

flask web开发学习之初识flask(三)

文章目录

      • 一、flask扩展
      • 二、项目配置
        • 1. 直接配置
        • 2. 使用配置文件
        • 3. 使用环境变量
        • 4. 实例文件夹
      • 三、flask命令
      • 四、模版和静态文件
      • 五、flask和mvc架构


一、flask扩展

flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则,易于集成到flask应用中,并且可以大大加快开发速度。
常用flask扩展:
Flask-SQLAlchemy:操作SQLAlchemy,它是一个强大的关系型数据库框架。
Flask-Migrate:基于Alembic的Flask扩展,用于处理SQLAlchemy数据库迁移。
Flask-WTF:整合了WTForms的Flask扩展,提供表单类和验证功能。
Flask-Login:提供用户会话管理,处理用户登录、登出和记住我功能。
Flask-Mail:提供邮件发送支持。
Flask-RESTful:用于快速开发REST API的Flask扩展。
Flask-HTTPAuth:用于HTTP认证的简单扩展。
Flask-Caching:提供缓存支持,可以与多种后端如Redis、Memcached等配合使用。
Flask-Session:一个Flask扩展,用于服务器端会话管理。
Flask-Admin:提供一个简单的界面来管理数据模型。
Flask-SocketIO:为Flask应用添加WebSocket支持。
Flask-CORS:处理跨源资源共享(CORS),使得你可以在Flask应用中轻松地处理跨域请求。

二、项目配置

1. 直接配置

可以直接在创建 Flask 应用实例后,通过字典的方式对其进行配置:

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'your_secret_key'
2. 使用配置文件

在项目目录下创建config.py文件,将配置进行集中管理。

DEBUG = True
SECRET_KEY = 'your_secret_key'
SQLALCHEMY_DATABASE_URI = 'sqlite:///your-database.db'

然后在应用中加载此文件

import configapp = Flask(__name__)
app.config.from_object('config')
3. 使用环境变量

使用环境变量来配置Flask应用,能够让你的应用根据运行的环境(如开发环境、测试环境和生产环境)加载不同的配置,而无需更改代码。这样做有助于保护敏感信息,比如数据库的用户名和密码,不被直接存储在源代码中,同时也便于在不同的环境之间迁移应用。
在Unix-like系统(包括Linux和Mac OS X)中,你可以在命令行中设置环境变量,如下:

export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg

在Windows系统中,你可以使用以下命令:

set YOURAPPLICATION_SETTINGS=/path/to/settings.cfg

假设setting.cfg文件中内容为:

DEBUG=False
SECRET_KEY='production_secret_key'
SQLALCHEMY_DATABASE_URI='mysql://user:password@localhost/dbname'

在Flask中,你可以使用app.config.from_envvar()函数来加载一个指向配置文件的环境变量。例如:

app = Flask(__name__)
app.config.from_envvar('YOURAPPLICATION_SETTINGS')

当你运行你的Flask应用时,它会读取YOURAPPLICATION_SETTINGS环境变量指定的配置文件,并加载其中的配置项。
在开发过程中,手动设置环境变量可能会有些不方便。为了解决这个问题,你可以使用Python-dotenv这样的库来自动地从.env文件中加载环境变量。
在.env文件中写入(.env文件的使用在flask web开发学习之初识flask(二)已提到过:

YOURAPPLICATION_SETTINGS=/path/to/settings.cfg
4. 实例文件夹

Flask允许你定义一个实例文件夹来存放私密配置信息。实例文件夹通常位于应用的根路径,与 static 和 templates 文件夹同级,并且不应该被版本控制系统跟踪(如.gitignore中应包含instance/)。

app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('config.py', silent=True)

三、flask命令

除了flask内置的flask run等命令,我们也可以自定义命令。
通过创建任意一个函数,并为其添加app.cli.command()装饰器,我们就可以注册一个flask命令。

import click@app.cli.command()
def hello():click.echo('Hello, zly!')

函数的名称即为命令名称,这里注册的命令为hello,你可以使用flask hello命令来触发,也可以在app.cli.command()装饰器中传入参数来设置命令名称,比如传入"hello1",就可以使用flask hello1来触发。
在这里插入图片描述

四、模版和静态文件

在Flask中,模版和静态文件是构建动态网站的重要组成部分。它们通常用于呈现内容和提供客户端所需的样式和脚本。
模版(Templates):
模版是包含响应文本的文件,它们通常包含变量和表达式,这些变量和表达式在渲染时会被实际的值替换。这样,你就可以生成动态的HTML页面,其中的内容可以根据服务器端的数据来变化。

Flask默认使用Jinja2模版引擎来渲染模版。Jinja2是一个强大的模版引擎,它允许你使用类似Python的语法在模版中插入逻辑。

模版文件通常放置在Flask项目的 templates 文件夹中。以下是一个简单的模版示例:

<!-- templates/hello.html -->
<html>
<head><title>Hello Template</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

在这个模版中,{{ name }} 是一个变量,它将在渲染模版时被传递到模版的值所替换。在Flask视图函数中,你可以使用 render_template 函数来渲染模版,并传递需要的变量:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)

静态文件(Static Files)
静态文件包括通常不会改变的文件,如CSS样式表、JavaScript脚本、图片等。这些文件直接由浏览器请求和加载,不需要经过服务器端的处理。
在Flask项目中,静态文件默认放在 static 文件夹中。

在HTML模版中引用这个静态文件,你可以使用Jinja2提供的 url_for 函数:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

这里的 url_for(‘static’, filename=‘style.css’) 调用会生成指向静态文件 style.css 的URL。

五、flask和mvc架构

Flask是一个轻量级的Web应用框架,它提供了构建Web应用所需的基本工具和功能。虽然Flask本身并不强制使用任何特定的架构模式,但它非常灵活,可以很容易地用来实现MVC(Model-View-Controller)架构模式。

在mvc架构中,程序被分为三个组件:数据处理(Model),用户界面(View),交互逻辑(Controller)。

严格来说,flask并不是mvc架构的框架,因为他没有内置数据模型支持。在flask中,我们可以这样实现mvc框架,模板文件=>View,视图函数=>Controller,ORM工具定义数据模型=>Model。

相关文章:

flask web开发学习之初识flask(三)

文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则&#xff0c;易于集成…...

【设计模式-3.1】结构型——外观模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;外观模式&#xff1b; 亲手下厨还是点外卖&#xff1f; 外观模式属于结构型的设计模式&#xff0c;关注类或对象的组合&#xff0c;所呈现出来的结构。以吃饭为例&#xff0c;在介绍外观模式之前&#xff0…...

flutter学习-day2-认识flutter

&#x1f4da; 目录 简介特点架构 框架层引擎层嵌入层 本文学习和引用自《Flutter实战第二版》&#xff1a;作者&#xff1a;杜文 1. 简介 Flutter 是 Google 推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App&#…...

解决selenium使用.get()报错:unknown error: unsupported protocol

解决方法 将原来的&#xff1a; url "https://www.baidu.com" browser.get(url)替换为&#xff1a; url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()问题解析 之前运行都是正…...

关于加密解密,加签验签那些事

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号&#xff1f;这些名词都是什么&#xff1f;还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼&#xff1f;或许在你日常工作没有听说过这些名词&#xff0c;但是一旦你要设计一个对外访问的接口&#xff…...

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi&#xff0c;升级vim&#xff0c;执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…...

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …...

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建&#xff1f; int count…...

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间&#xff1f; 地址空间是如何设计的&#xff1f; 为什么要有地址空间&#xff1f; 程序地址空间排布图 在32位下&#xff0c;一个进程的地址空间&#xff0c;取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…...

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具&#xff0c;它允许用户创建交互式的、高保真度的原型&#xff0c;以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型&#xff0c;以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…...

接口测试总结及其用例设计方法

接口测试的总结文档   第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1a;主要介绍…...

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是&#xff1a;“Talk is cheap. Show me the code.”&#xff08;嫑废话&#xff0c;上代码&#xff09;。本题就请你直接在屏幕上输出这句话。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出…...

智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.参考…...

视频中自监督学习:「我的世界」下指令理解与跟随

本文介绍了北京大学人工智能研究院梁一韬助理教授所带领的 CraftJarvis 团队在「我的世界」环境下探索通用智能体设计的新进展&#xff0c;题为“GROOT: Learning to Follow Instructions by Watching Gameplay Videos”。 ​ GROOT 该研究的核心目标是探索能否摆脱文本数据的标…...

Spring基于xml半注解开发

目录 Component的使用 依赖注解的使用 非自定义Bean的注解开发 Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>标签及其标签属性的配置&#xff0c;使用Component注解替代<bean>标签中的id以及class属性&#xff0c;而对…...

功能测试,接口测试,自动化测试,压力测试,性能测试,渗透测试,安全测试,具体是干嘛的?

软件测试是一个广义的概念&#xff0c;他包括了多领域的测试内容&#xff0c;比如&#xff0c;很多新手可能都听说&#xff1a;功能测试&#xff0c;接口测试&#xff0c;自动化测试&#xff0c;压力测试&#xff0c;性能测试&#xff0c;渗透测试&#xff0c;安全测试等&#…...

oracle 下载java之前版本

登录oracle官网&#xff1a;Oracle | Cloud Applications and Cloud Platform 点击resource 进入该页面 点击这个 出现之前版本...

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台&#xff0c;用户只需要为Agent指定一个名称和目标&#xff0c;就可以在浏览器中链接大型语言模型&#xff08;如GPT-4&#xff09;来创建和部署Agent平台。 PS&#xff1a;目前agentGPT仅支持chatgpt模型&#xff0c;暂时不支持本地llm模…...

AGM离线下载器使用说明

AGM专用离线下载器示意图&#xff1a; 供电方式&#xff1a; 通过 USB 接口给下载器供电&#xff0c;跳线 JP 断开。如果客户 PCB 的 JTAG 口不能提供 3.3V 电源&#xff0c;或仅需烧写下载器&#xff0c;尚未连接用户 PCB 时&#xff0c;采用此种方式供电。 或者&#xff1a…...

viple与物理机器人(一):线控模拟

为了检测viple程序与物理机器人是否能顺利连接上 如果能顺利连接上&#xff0c;那么&#xff0c;可以通过内建事件从而控制物理机器人的前进、后退、左转、右转以及暂停。 如果不能连接上&#xff0c;首先&#xff0c;程序无法控制物理机器人&#xff0c;其次&#xff0c;当vip…...

Android混淆配置终极指南:基于Awesome Android库的完整ProGuard规则

Android混淆配置终极指南&#xff1a;基于Awesome Android库的完整ProGuard规则 【免费下载链接】awesome-android A curated list of awesome Android packages and resources. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-android 在Android应用开发中&…...

FLUX.1-dev像素模型部署教程:Docker Compose编排前端+后端+模型服务

FLUX.1-dev像素模型部署教程&#xff1a;Docker Compose编排前端后端模型服务 1. 项目概述 像素幻梦(Pixel Dream Workshop)是基于FLUX.1-dev扩散模型构建的像素艺术生成平台&#xff0c;采用16-bit像素风格设计&#xff0c;为创作者提供沉浸式的AI绘图体验。本教程将指导您使…...

Local SDXL-Turbo应用案例:独立开发者构建个人AI绘画SaaS产品的技术栈选型

Local SDXL-Turbo应用案例&#xff1a;独立开发者构建个人AI绘画SaaS产品的技术栈选型 1. 引言&#xff1a;从想法到产品&#xff0c;一个开发者的选择 如果你是一名独立开发者&#xff0c;或者是一个小团队的负责人&#xff0c;想做一个自己的AI绘画工具&#xff0c;你可能会…...

OpenClaw浏览器自动化:千问3.5-27B驱动智能检索与内容聚合

OpenClaw浏览器自动化&#xff1a;千问3.5-27B驱动智能检索与内容聚合 1. 为什么需要浏览器自动化助手 作为一个经常需要做市场调研的技术人&#xff0c;我过去总是陷入这样的循环&#xff1a;打开十几个浏览器标签页&#xff0c;在不同平台间反复切换&#xff0c;手动复制粘…...

构建编译环境

拉取LLVM并配置这里我保存在D盘#创建文件夹 mkdir D:\LLVM cd D:\LLVM #拉取源码 (只拉取核心仓库&#xff0c;不需要 submodule&#xff0c;现在 LLVM 是 monorepo) #这一步比较大&#xff0c;网络不好请挂梯子 git clone --depth1 https://github.com/llvm/llvm-project.…...

Figma Make 提示词工程化:构建从布局、组件、交互到风格的稳定设计系统

1. 从零散到系统&#xff1a;为什么需要工程化提示词 刚开始用Figma Make做设计时&#xff0c;我和大多数人一样&#xff0c;每次生成页面都要重新写一遍提示词。最头疼的是明明想要类似的风格&#xff0c;结果生成的页面总是"飘忽不定"——今天按钮圆角是8px&#x…...

5分钟搞定OpenClaw+千问3.5-27B:星图平台镜像一键体验方案

5分钟搞定OpenClaw千问3.5-27B&#xff1a;星图平台镜像一键体验方案 1. 为什么选择云端沙盒方案 上周我尝试在本地笔记本上部署OpenClaw时&#xff0c;被各种环境依赖和权限问题折磨了整整两天。当看到星图平台提供预装OpenClaw和千问3.5-27B的完整镜像时&#xff0c;简直像…...

数据转换器(ADC/DAC)核心术语与工程实践解析

1. 数据转换器基础概念解析在电子工程领域&#xff0c;数据转换器&#xff08;ADC/DAC&#xff09;是连接模拟世界与数字系统的关键桥梁。作为一名从业十余年的硬件工程师&#xff0c;我经常遇到新手对这些专业术语感到困惑的情况。本文将系统梳理56个核心术语&#xff0c;结合…...

解锁B站评论区成分检测器核心价值:从入门到精通的实战指南

解锁B站评论区成分检测器核心价值&#xff1a;从入门到精通的实战指南 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分&#xff0c;支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...

2026知识付费SaaS避坑指南:数据安全与系统稳定性实测,创客匠人为何值得托付?

在知识付费行业&#xff0c;大多数选型对比只关注“前台功能”&#xff1a;能不能卖课、能不能直播、有没有拼团。但真正决定生意生死的&#xff0c;往往是看不见的“底层能力”——数据是否安全&#xff1f;系统是否稳定&#xff1f;学员资产能否真正归你所有&#xff1f;过去…...