├── README.md ├── main.py └── requirements.txt /README.md: -------------------------------------------------------------------------------- 1 | [![Deploy](https://button.deta.dev/1/svg)](https://go.deta.dev/deploy) 2 | 3 | Or run `deta new` to deploy. 4 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI 2 | from pydantic import BaseModel 3 | from fastapi.responses import JSONResponse 4 | from deta import Deta 5 | 6 | deta = Deta() 7 | 8 | users = deta.Base("fastapi-crud") 9 | 10 | app = FastAPI() 11 | 12 | 13 | class User(BaseModel): 14 | name: str 15 | age: int 16 | hometown: str 17 | 18 | 19 | class UserUpdate(BaseModel): 20 | name: str = None 21 | age: int = None 22 | hometown: str = None 23 | 24 | @app.get("/") 25 | def read_root(): 26 | return {"Hello": "There"} 27 | 28 | 29 | @app.post("/users", status_code=201) 30 | def create_user(user: User): 31 | u = users.put(user.dict()) 32 | return u 33 | 34 | @app.get("/users") 35 | def list_users(): 36 | us = next(users.fetch()) 37 | return us 38 | 39 | @app.get("/users/{uid}") 40 | def get_user(uid: str): 41 | user = users.get(uid) 42 | if user: 43 | return user 44 | return JSONResponse({"message": "user not found"}, status_code=404) 45 | 46 | 47 | @app.patch("/users/{uid}") 48 | def update_user(uid: str, uu: UserUpdate): 49 | updates = {k:v for k,v in uu.dict().items() if v is not None} 50 | try: 51 | users.update(updates, uid) 52 | return users.get(uid) 53 | except Exception: 54 | return JSONResponse({"message": "user not found"}, status_code=404) 55 | 56 | 57 | @app.delete("/users/{uid}") 58 | def delete_user(uid: str): 59 | users.delete(uid) 60 | return 61 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi --------------------------------------------------------------------------------