为请求/响应对象使用dataclasses模块的ASGI应用程序

dataclassesapi的Python项目详细描述


数据类API


{str}文档{str}

源代码https://github.com/dutradda/dataclassesapi


主要特点

  • 将请求对象声明为@dataclass:

    • ^{path>
    • Query查询字符串上的值
    • Headers获取标题上的值
    • Body表示主体上的值
    在_
  • 将响应对象声明为@dataclass:

    • Headers获取标题上的值
    • Body表示主体上的值
    在_

要求

安装

$ pip install dataclassesapi

基本示例

^{pr2}$

运行服务器(需要uvicorninstalled):

uvicorn myapp:app
INFO: Started server process [16220]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

查询服务器(需要curlinstalled):

curl -i localhost:8000/hello?name=World
HTTP/1.1 200 OK
date: Thu, 1st January 1970 00:00:00 GMT
server: uvicorn
content-type: application/json
content-length: 26

{"message":"Hello World!"}

完整请求/响应示例

fromdataclassesimportdataclassfromhttpimportHTTPStatusfromdataclassesjsonimportdataclassjson,integer,stringfromdataclassesapiimportMethodType,Route,asgi_appfromdataclassesapi.requestimportBody,Headers,PathArgs,Query,Requestfromdataclassesapi.responseimportBodyasResponseBodyfromdataclassesapi.responseimportResponse@dataclassclassMyPathArgs(PathArgs):name:str@dataclassclassMyQuery(Query):location:str@dataclassclassMyHeaders(Headers):x_req_id:str@dataclassclassMyBody(Body):last_name:strage:int@dataclassclassMyRequest(Request):path_args:MyPathArgsquery:MyQueryheaders:MyHeadersbody:MyBody@dataclassclassYou:name:strlast_name:strlocation:string(max_length=100)age:integer(minimum=18)@dataclassclassMyResponseBody(ResponseBody):hello_message:strabout_you:You@dataclassjson@dataclassclassMyResponse(Response):body:MyResponseBodyheaders:MyHeadersdefhello_controller(req:MyRequest)->MyResponse:body=MyResponseBody(hello_message=hello_message(req.path_args.name,req.query.location),about_you=You(name=req.path_args.name,last_name=req.body.last_name,location=req.query.location,age=req.body.age,),)headers=MyHeaders(x_req_id=req.headers.x_req_id)returnMyResponse(HTTPStatus.OK,body=body,headers=headers)defhello_message(name:str,location:str)->str:returnf'Hello {name}! Welcome to {location}!'app=asgi_app([Route('/hello/{name}',MethodType.PUT,hello_controller)])

运行服务器:

uvicorn myapp:app
INFO: Started server process [16220]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

查询服务器:

curl -i -X PUT localhost:8000/hello/Me?location=World \
    -H 'x-req-id: 1a2b3c4d5e6f7g8h'\
    -d '{"last_name":"My Self","age":32}'
HTTP/1.1 200 OK
date: Thu, 1st January 1970 00:00:00 GMT
server: uvicorn
x-req-id: 1a2b3c4d5e6f7g8h
content-type: application/json
content-length: 123

{"hello_message":"Hello Me! Welcome to World!","about_you":{"name":"Me","last_name":"My Self","location":"World","age":32}}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于测试失败,java testcontainers maven构建失败   java实现jacobi算法实现laplace方程   java中的多线程:如何在不等待所有线程使用ExecutorService完成任务的情况下终止所有线程的执行?   java Hello World不在Android Studio 3中工作   ubuntu Tomcat7的Java版本不正确   java Javafx内存泄漏   对于手动实现的Spring数据存储库方法,我应该使用Java8默认方法吗?   googleappengine中的java添加过滤查询   html当使用JSOUP库在Java中读取标签时,如何保留标签(如<br>、<ul>、<li>、<p>等)的含义?   编码为什么jasper生成的报告在Java中不显示西里尔语(保加利亚语)?   java有没有办法隐藏当前位置和jdk动作?   java找出编译原型文件的版本   有没有办法在运行时更改java方法的访问修饰符?   语法字符串。。。Java中的参数   java数组元素在添加其他元素时会相互覆盖   eclipse中的java GWT项目   java如何为spring rest模板请求将动态json属性名映射到jackson   java无法在Windows 10上找到特定的JDK   在xml字符串和java字符串之间提取正则表达式子字符串