当前位置: 首页 > 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显示屏的安全亮度参数和…...

数据库sql--关于计算方圆5公里点位编写

当我们计算两个地球上任意两点之间的距离时&#xff0c;可以使用Haversine公式。 下面是每个函数和数值的详细解释&#xff1a; RADIANS(target_latitude)&#xff1a;将目标纬度值转换为弧度制。这是因为Haversine公式以弧度为单位计算角度。RADIANS(latitude)&#xff1a;将…...

嵌入式基础知识-DMA

本篇来介绍DMA的一些基础知识。 1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌…...

STM32 软件IIC 控制OLED 显示屏

1. 硬件IIC 实在是太难用了&#xff0c;各种卡死&#xff0c;各种发不出来数据&#xff0c;没那么多时间折腾了&#xff0c;还是用软件IIC 先吧&#xff0c;初始化 void OLED_Software_IIC_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_AHBPeriphClockCmd(OLED_SOFTWARE…...

【系统设计系列】 DNS和CDN

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemarti…...

thinkphp中使用Elasticsearch 7.0进行多表的搜索

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、thinkphp中使用Elasticsearch 7.0进行多表的搜索二、使用步骤1.引入库2.读入数据 总结 前言 提示&#xff1a;thinkphp中使用Elasticsearch 7.0进行多表的…...

说说 TCP的粘包、拆包

分析&回答 拆包和粘包是在socket编程中经常出现的情况&#xff0c; 在socket通讯过程中&#xff0c;如果通讯的一端一次性连续发送多条数据包&#xff0c;tcp协议会将多个数据包打包成一个tcp报文发送出去&#xff0c;这就是所谓的粘包。如果通讯的一端发送的数据包超过一…...

PowerToys安装

PowerToys 是微软开发者开发的免费实用工具集&#xff0c;可以用于高级用户调整和简化 Windows 操作&#xff0c;以提高效率。 官网安装方法&#xff1a; https://learn.microsoft.com/zh-cn/windows/powertoys/install 目前安装文件路径&#xff1a; https://github.com/m…...

Unity——LitJSON的安装

一、LitJSON介绍 特点 LitJSON是一个轻量级的C# JSON库&#xff0c;用于在Unity游戏开发中进行JSON数据的序列化和反序列化操作。它提供了简单而高效的接口&#xff0c;帮助开发者处理JSON数据。 以下是LitJSON库的一些主要特点和功能&#xff1a; 1. 高性能&#xff1a;Lit…...

YOLOv5:对yolov5n模型进一步剪枝压缩

YOLOv5&#xff1a;对yolov5n模型进一步剪枝压缩 前言前提条件相关介绍具体步骤修改yolov5n.yaml配置文件单通道数据&#xff08;黑白图片&#xff09;修改models/yolo.py文件修改train.py文件 剪枝后模型大小 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;…...

大数据(八):Pandas的基础应用详解(五)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...