Python框架之FastAPI
原起:
最近项目中现存的是使用的python的异步方式进行开发, 但是只是存在脚本部分, 并没有提供对外的Web服务,正好趁机将Fastapi嵌入其中使用.
官方文档: https://fastapi.tiangolo.com/zh/tutorial/first-steps/
[安装]
pip install "fastapi[all]"
[使用]
基本:
# pip install fastapi pycryptodome
import json
import base64
import string
import random
import uvicorn
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.responses import HTMLResponse, JSONResponse app = FastAPI() users_db = {
"testuser": {
"username": "testuser",
"password": "testpassword",
"email": "testuser@example.com",
"fullName": "Test User",
}
} class LoginRequest(BaseModel):
data: str def encrypt(data: dict, key: bytes, iv: bytes) -> str:
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_data = pad(json.dumps(data).encode("utf-8"), AES.block_size)
encrypted = cipher.encrypt(padded_data)
return base64.b64encode(encrypted).decode("utf-8") def decrypt(data: str, key: bytes, iv: bytes) -> dict:
encrypted_data = base64.b64decode(data)
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
return json.loads(decrypted_data.decode("utf-8")) def generate_string(length: int) -> str:
return "".join(
random.choice(string.digits + string.ascii_letters) for _ in range(length)
) @app.get("/api/getSecret")
async def get_secret():
key = generate_string(32)
iv = generate_string(16)
app.state.secret_key = key
app.state.secret_iv = iv
return {"key": app.state.secret_key, "iv": app.state.secret_iv} @app.post("/api/login")
async def login(request: LoginRequest):
key = app.state.secret_key.encode()
iv = app.state.secret_iv.encode() login_data = decrypt(request.data, key, iv) username = login_data.get("username")
password = login_data.get("password") if username in users_db and users_db[username]["password"] == password: # type: ignore
user_info = users_db[username] # type: ignore
encrypted_response = encrypt({"success": True, "user": user_info}, key, iv)
return JSONResponse(content={"data": encrypted_response})
else:
encrypted_response = encrypt(
{"success": False, "message": "Invalid username or password"}, key, iv
)
return JSONResponse(content={"data": encrypted_response}) @app.get("/", response_class=HTMLResponse)
async def index():
with open("index.html", "r", encoding="utf-8") as file:
html_content = file.read()
return HTMLResponse(content=html_content) if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
部分说明:
app.state: state是实例的一个属性, 可以为该实例定义一下全局属性
Python框架之FastAPI的更多相关文章
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- Python框架、库以及软件资源汇总
转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...
- android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)
android模拟器(genymotion)+appium+python 框架执行的基本过程: 1.Push.initDate(openid)方法 //业务数据初始化 1.1 v5db.p ...
- 10个用于Web开发的最好 Python 框架
Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...
- 第六篇:web之python框架之django
python框架之django python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Hadoop的Python框架指南
http://www.oschina.NET/translate/a-guide-to-Python-frameworks-for-Hadoop 最近,我加入了Cloudera,在这之前,我在计算生物 ...
- 【python】Python框架、库和软件资源大全
很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世界各地的程序员们都能够贡献他们的代码与创新. Python就是这样一门受到全世界各地开源社区支持的语言. ...
- Python框架之Django的相册组件
Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...
- 10款Web开发最佳的Python框架
Python是跻身于当代IT世界最流行和代码最高效的编程语言之一.Python框架能帮助你快速启动Web应用. 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元 ...
随机推荐
- CCIA数安委等组织发起“个人信息保护影响评估专题工作”,合合信息首批入选试点
近期,"个人信息保护影响评估专题工作"(简称"PIA专题工作")试点评估结果正式发布.PIA专题工作组由中国电子技术标准化研究院.中国信息通信院等单位的法律与技 ...
- 神经网络之卷积篇:详解为什么使用卷积?(Why convolutions?)
详解为什么使用卷积? 来分析一下卷积在神经网络中如此受用的原因,然后对如何整合这些卷积,如何通过一个标注过的训练集训练卷积神经网络做个简单概括.和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀 ...
- 基于全息感知的智慧高速IT设施监控运维方案
作为智能交通的重要细分领域,建设智慧高速是实施交通强国战略的重要基础.在信息化时代,交通行业已经依托信息化建设取得了显著的成果,其中以收费网络.办公网络.监控网络和通讯网络为基础的网络架构已经形成,并 ...
- PHP面试,拼团
如何设计数据库模型来支持拼团功能? 答案:拼团功能涉及到多个用户参与同一团的情况,可以设计以下表结构: Product 表: 存储商品信息,包括商品ID.名称.价格等字段. Group 表: 存储拼团 ...
- C#中的原始字符串
// 原始字符串使用 三个引号(至少三对)包裹,ps: 引号单独占用一行 // 原始字符串使用变量需要加两个 $$"""{变量}""" st ...
- HRM平台的登录页的背景图片- scss
.login-container { // 设置背景图片 background-image: url("~@/assets/common/login.jpg"); ba ...
- MYSQL存储过程-练习3 repeat循环
MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...
- Android复习(三)清单文件中的元素——>action、activity-alias、category、compatible-screens、data
<action> 语法: <action android:name="string" /> 包含于: <intent-filter> 说明: ...
- 从零开始学机器学习——构建一个推荐web应用
首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 今天,我们终于将分类器这一章节学习完活了,和回归一样,最后一章节用来构建web应用程序,我们会回顾之 ...
- 云原生爱好者周刊:Chaos Mesh 升级成为 CNCF 孵化项目
云原生一周动态要闻: Chaos Mesh 升级成为 CNCF 孵化项目 Zabbix Web Frontend 中发现安全漏洞 2021 年 Rust 调查报告出炉 Sysdig 2022 云原生安 ...