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

【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)

url-统一资源定位符-不同的url对应不同的资源
作为服务端,url和视图函数的映射关系就是路由。

定义传递参数的方式:
1.创建动态url

@app.route("/login2/<username>/<passwd>")
def login2(username, passwd):if username == "root" and passwd == "123456":return f"login success"else:return f"login false"

2.url携带参数:? &

记住传过来的东西都在我们flask的request对象,这个对象不需要我们管,flask框架已经给我们搞好了,需要什么,就用request的属性拿就好了

理解:接口 and API(登录为例)
接口:一般来说,是两个程序使用的,互相通信,A程序暴露一个接口,B程序调用即可。后端flask写好了接口,前端一般不涉及数据库,不能判断能否登陆成功(nodejs也可以虽做后端,只是不普遍),所以前程调用后端的接口(login接口),把账号密码参数传递过来,然后后端再去数据库里判断是否正确,再去做一步操作,并返回给前端登录是否成功。

接口文档:
url+请求方法+传递参数+返回结果

3.json 接收传递过来的json格式数据

from flask import Flask, request
app = Flask(__name__)@app.route("/login")
def login():print(request.json.get("username"))print(request.json.get("password"))return "login html"app.run(debug=True, host="0.0.0.0", port=9000)

在这里插入图片描述
postman一功能:怎么写程序发起这种请求
在这里插入图片描述

import requests
import jsonurl = "http://127.0.0.1:9000/login"#字典-》json格式字符串
payload = json.dumps({"username": "root","password": "123456"
})
headers = {'Content-Type': 'application/json'
}response = requests.request("GET", url, headers=headers, data=payload)print(response.text)

4.form表单传递数据

from flask import Flask, request
app = Flask(__name__)@app.route("/login")
def login():print(request.form.get("username"))print(request.form.get("password")return "login html"

html语言一定是要有响应的,所以不要忘记"return html",不然会报500状态🐎的错误。

发送的请求:可以有url携带参数(http头部)+body一种方式(data部分)。

浏览器默认GET方法,是不允许body数据传递,而是一Headers传递(全在url上)

    print(request.url) #整个路径print(request.path) #资源路径print(request.headers) #头部字段

在这里插入图片描述
5.小练习:登录注册功能

"""
@date: 2023/9/5
@file: 登录注册功能
@author: Jiangda
@desc: test"""from flask import Flask, request
app = Flask(__name__)user_dict = {}
@app.route("/register")
def register():username = request.json.get("username")passwd = request.json.get("passwd")re_passwd = request.json.get("re_passwd")if not (username and passwd and re_passwd):return "参数传递不完整"elif passwd != re_passwd:return "注册密码不一致"elif username in user_dict:return "用户已注册"else:user_dict[username] = passwdprint(f"user_dict is {user_dict}")return "register success!"app.run(debug=True, host="0.0.0.0", port=9000)

拆分

入口文件:
server.py
排查问题两大思路:1.新增文件有没有运行。2.有没有绑定到核心对象app上

from app import create_app
sq_app = create_app()
sq_app.run(host = sq_app.config['HOST'],port = sq_app.config['PORT'],debug = sq_app.config['DEBUG'])

app.py
核心对象的设置和创建,每一个核心对象是一个网站,可以运行很多核心对象

import os
from flask import Flaskdef create_app():sq_app = Flask(__name__)# 方式一:从配置文件中读取#    if isinstance(obj, str):#        obj = import_string(obj)#    for key in dir(obj):#        if key.isupper():#            self[key] = getattr(obj, key)sq_app.config.from_object('config.settings')# 方式二:从环境变量中读取(好处:根据不同的系统环境加载不同的配置文件)if 'FLASK_CONF' in os.environ:sq_app.config.from_envvar('FLASK_CONF')return sq_app

./config/settings.py

DEBUG = 'True'
HOST = "0.0.0.0"
PORT = 9000

蓝图
就像一个中间层,方便管理路由
app – bp – 视图

视图先绑bp,bp再去绑定app
.route/__init__.py

from .view01 import view01_bpdef init_app(app):app.register_blueprint(view01_bp)

.route/view01.py

# 管理视图
from flask import Blueprintview01_bp = Blueprint("view01", __name__, url_prefix="/v1/")@view01_bp.route("index")
def index():return "this is index"

app.py
在crete_app()中添加

    import routerrouter.init_app(sq_app) #将蓝图与app绑定

综合:登录注册(拆分+蓝图)

在这里插入图片描述
server.py

from app import create_app
sq_app = create_app()
sq_app.run(host = sq_app.config['HOST'],port = sq_app.config['PORT'],debug = sq_app.config['DEBUG'])

app.py

import os
from flask import Flaskdef create_app():sq_app = Flask(__name__)# 方式一:从配置文件中读取sq_app.config.from_object('config.settings')# 方式二:从环境变量中读取(好处:根据不同的系统环境加载不同的配置文件)if 'FLASK_CONF' in os.environ:sq_app.config.from_envvar('FLASK_CONF')import routerrouter.init_app(sq_app) #将蓝图与app绑定return sq_app

config.settings.py

DEBUG = 'True'
HOST = "0.0.0.0"
PORT = 9000# 全局变量
user_dict = {}

router/…
__init__.py

from .login import login_bp
from .register import register_bpdef init_app(app):app.register_blueprint(login_bp)app.register_blueprint(register_bp)

login.py

from flask import Blueprint, request
from config.settings import user_dictlogin_bp = Blueprint("login_bp", __name__, url_prefix="/v1")@login_bp.route("login")
def login():user = request.json.get("username")passwd = request.json.get("passwd")local_user_passwd = user_dict.get(user)if local_user_passwd and passwd == local_user_passwd:return "login success!"return "login fail"

register.py

from flask import Blueprint, request
from config.settings import user_dictregister_bp = Blueprint("register_bp", __name__, url_prefix="/v1")@register_bp.route("register")
def register():username = request.json.get("username")passwd = request.json.get("passwd")re_passwd = request.json.get("re_passwd")if not (username and passwd and re_passwd):return "参数传递不完整"elif passwd != re_passwd:return "注册密码不一致"elif username in user_dict:return "用户已注册"else:user_dict[username] = passwdprint(f"user_dict is {user_dict}")return "register success!"

用postman的GET方法+json数据格式按要求测试。

相关文章:

【自学开发之旅】Flask-回顾--对象拆分-蓝图(二)

url-统一资源定位符-不同的url对应不同的资源 作为服务端&#xff0c;url和视图函数的映射关系就是路由。 定义传递参数的方式&#xff1a; 1.创建动态url app.route("/login2/<username>/<passwd>") def login2(username, passwd):if username "…...

自动驾驶中间件

自动驾驶中间件 1. 什么是中间件2. 中间件的分类3. 自动驾驶为什么需要中间件4. 通信中间件 Reference&#xff1a; 自动驾驶中间件&#xff1a;量产落地的关键技术通俗易懂的告诉你什么是中间件 对于初入自动驾驶行业的人来说&#xff0c;各色各样的新型传感器、线控系统、芯…...

鲲鹏920(ARM64)移植javacpp

JavaCPP JavaCPP 使得Java 应用可以在高效的访问本地C++方法,JavaCPP底层使用了JNI技术,可以广泛的用在Java SE应用中(也包括安卓),以下两个特性是JavaCPP的关键,稍后咱们会用到: 提供一些注解,将Java代码映射为C++代码提供一个jar,用java -jar命令可以将C++代码转为…...

python打包exe实用版

pyinstaller模块用于将python项目打包成exe文件&#xff0c;以方便地在没有安装python环境的机器上运行。该模块使用 pip install pyinstaller 安装即可。 参数命令含义-Dpyinstaller -D demo.py默认选项。除了主程序demo.exe外&#xff0c;还会在在dist文件夹中生成很多依赖文…...

什么是反向代理(Reverse Proxy)?解释反向代理的作用和常见应用。

1、什么是反向代理&#xff08;Reverse Proxy&#xff09;&#xff1f;解释反向代理的作用和常见应用。 反向代理是一种代理服务器模型&#xff0c;它位于客户端和后端服务器之间。它允许将请求转发到后端服务器&#xff0c;并将响应返回给客户端。反向代理的主要作用如下&…...

算法通关村第十二关——不简单的字符串转换问题

前言 字符串是我们在日常开发中最常处理的数据&#xff0c;虽然它本身不是一种数据结构&#xff0c;但是由于其可以包含所有信息&#xff0c;所以通常作为数据的一种形式出现&#xff0c;由于不同语言创建和管理字符串的方式也各有差异&#xff0c;因此针对不同语言特征又产生…...

PROSOFT PTQ-PDPMV1网络接口模块

通信接口&#xff1a;PROSOFT PTQ-PDPMV1 网络接口模块通常配备了多种通信接口&#xff0c;以便与不同类型的设备和网络进行通信。常见的接口包括以太网、串行端口&#xff08;如RS-232和RS-485&#xff09;、Profibus、DeviceNet 等。 协议支持&#xff1a;该模块通常支持多种…...

力扣(LeetCode)算法_C++——稀疏矩阵的乘法

给定两个 稀疏矩阵 &#xff1a;大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 &#xff0c;返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。 示例 1&#xff1a; 输入&#xff1a;mat1 [[1,0,0],[-1,0,3]], mat2 [[7,0,0],[0,0,0],[0,0,1]] 输出&am…...

华为云API人脸识别服务FRS的感知力—偷偷藏不住的你

云服务、API、SDK&#xff0c;调试&#xff0c;查看&#xff0c;我都行 阅读短文您可以学习到&#xff1a;人工智能AI人脸的识别、检测、搜索、比对 1、IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE&#xff0c;…...

产品技术体系

产品&#xff0c;是一个企业或公司针对市场客户推出的一系列相关的功能或者服务&#xff0c;为对应的客户解决实际问题&#xff0c;进而产生对应的商业、社会价值。有了这些实际的价值&#xff0c;企业就会获得相应的利益或者利润回报。正常来讲&#xff0c;这应该是一个良性的…...

Docker从认识到实践再到底层原理(二-3)|LXC容器

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

[运维|docker] ubuntu镜像更新时报E: Problem executing scripts APT::Update::Post-Invoke错误

参考文献 docker-ce在ubuntu:22.04进行apt update时报错E: Problem executing scripts APT::Update::Post-Invoke 详细报错信息 E: Problem executing scripts APT::Update::Post-Invoke rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/c…...

计算机网络的故事——HTTP首部

HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段&#xff0c;还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为&#xff0c;分成 2 种类型。端到端首部和逐跳首部...

js农历与阳历转换使用笔记

1、新建utils/dateChange.js /*** 1900-2100区间内的公历、农历互转* charset UTF-8* Author jiangjiazhi* 公历转农历&#xff1a;calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]* 农历转公历&#xff1a;calendar.lunar2solar(1987,09,10); //[…...

苹果与芯片巨头Arm达成20年新合作协议,将继续采用芯片技术

9月6日消息&#xff0c;据外媒报道&#xff0c;芯片设计巨头Arm宣布在当地时间周二提交给美国证券交易委员会&#xff08;SEC&#xff09;的最新IPO文件中&#xff0c;透露与苹果达成了一项长达20年的新合作协议&#xff0c;加深了双方之间的合作关系。 报道称&#xff0c;虽然…...

Linux下systemd深入指南:如何优化Java服务管理与开机自启配置

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

PMOS阵列(PMOS阵列代替)

pmos阵列没有找到&#xff0c;不过高压侧驱动芯片倒是可以使用VN340SP Datasheet - VN340SP-E & VN340SP-33-E - Quad high-side smart power solid-state relayhttps://www.st.com/resource/en/datasheet/vn340sp-33-e.pdf VN340SP-E - 四通道高侧智能功率固态继电器 - 意…...

Linux常见指令

1、ls指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件-l 列出…...

让开发回归简单模式-组件封装

对于工作年限不长的程序员来说&#xff0c;知识储备是非常关键的。在开发中各种技术的应用已经非常普遍了&#xff0c;例如常见的各种ORM,各种中间件如Redis&#xff0c;MQ等等&#xff0c;又如WebApi路由配置等等&#xff0c;对于常常做开发的程序员来说&#xff0c;都是小事&…...

LED显示屏安全亮度参数设置方法和防护

随着LED显示屏应用领域越来越广&#xff0c;但其高亮度造成的光污染&#xff0c;常受到的人们的诟病。为了更好的避免光污染&#xff0c;我整理了一些关于LED显示安全亮度参数设置方法和安全防护措施。你知道LED广告牌是如何工作的吗&#xff1f; 设置LED显示屏的安全亮度参数和…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...