├── HowTo.txt ├── README.md ├── __pycache__ ├── main.cpython-38.pyc ├── model.cpython-38.pyc └── pg_db.cpython-38.pyc ├── main.py ├── model.py └── pg_db.py /HowTo.txt: -------------------------------------------------------------------------------- 1 | --> install module 2 | pip3 install SQLAlchemy 3 | pip3 install databases 4 | pip3 install DateTime 5 | pip3 install typing 6 | pip3 install uuid 7 | pip3 install pydantic 8 | pip3 install passlib 9 | 10 | --> DB Script 11 | create user usertest with NOINHERIT LOGIN ENCRYPTED PASSWORD 'usertest222'; 12 | create database dbtest owner=usertest; 13 | 14 | --> How to run 15 | # uvicorn main:app --reload -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fastapi-demo-1 -------------------------------------------------------------------------------- /__pycache__/main.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hellocoder2020/fastapi-demo-1/2a94db676fcb1035924d26d9bf46063dddae1694/__pycache__/main.cpython-38.pyc -------------------------------------------------------------------------------- /__pycache__/model.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hellocoder2020/fastapi-demo-1/2a94db676fcb1035924d26d9bf46063dddae1694/__pycache__/model.cpython-38.pyc -------------------------------------------------------------------------------- /__pycache__/pg_db.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hellocoder2020/fastapi-demo-1/2a94db676fcb1035924d26d9bf46063dddae1694/__pycache__/pg_db.cpython-38.pyc -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import datetime, uuid 2 | import model as mdUser 3 | from pg_db import database, users 4 | from fastapi import FastAPI 5 | from typing import List 6 | from passlib.context import CryptContext 7 | 8 | pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") 9 | 10 | app = FastAPI( 11 | docs_url="/api/v2/docs", 12 | redoc_url="/api/v2/redocs", 13 | title="Core API", 14 | description="New Framework of Python", 15 | version="2.0", 16 | openapi_url="/api/v2/openapi.json", 17 | 18 | ) 19 | 20 | @app.on_event("startup") 21 | async def startup(): 22 | await database.connect() 23 | 24 | @app.on_event("shutdown") 25 | async def shutdown(): 26 | await database.disconnect() 27 | 28 | @app.get("/users", response_model=List[mdUser.UserList], tags=["Users"]) 29 | async def find_all_users(): 30 | query = users.select() 31 | return await database.fetch_all(query) 32 | 33 | @app.post("/users", response_model=mdUser.UserList, tags=["Users"]) 34 | async def register_user(user: mdUser.UserEntry): 35 | gID = str(uuid.uuid1()) 36 | gDate =str(datetime.datetime.now()) 37 | query = users.insert().values( 38 | id = gID, 39 | username = user.username, 40 | password = pwd_context.hash(user.password), 41 | first_name = user.first_name, 42 | last_name = user.last_name, 43 | gender = user.gender, 44 | create_at = gDate, 45 | status = "1" 46 | ) 47 | 48 | await database.execute(query) 49 | return { 50 | "id": gID, 51 | **user.dict(), 52 | "create_at":gDate, 53 | "status": "1" 54 | } 55 | 56 | @app.get("/users/{userId}", response_model=mdUser.UserList, tags=["Users"]) 57 | async def find_user_by_id(userId: str): 58 | query = users.select().where(users.c.id == userId) 59 | return await database.fetch_one(query) 60 | 61 | @app.put("/users", response_model=mdUser.UserList, tags=["Users"]) 62 | async def update_user(user: mdUser.UserUpdate): 63 | gDate = str(datetime.datetime.now()) 64 | query = users.update().\ 65 | where(users.c.id == user.id).\ 66 | values( 67 | first_name = user.first_name, 68 | last_name = user.last_name, 69 | gender = user.gender, 70 | status = user.status, 71 | create_at = gDate, 72 | ) 73 | await database.execute(query) 74 | 75 | return await find_user_by_id(user.id) 76 | 77 | @app.delete("/users/{userId}", tags=["Users"]) 78 | async def delete_user(user: mdUser.UserDelete): 79 | query = users.delete().where(users.c.id == user.id) 80 | await database.execute(query) 81 | 82 | return { 83 | "status" : True, 84 | "message": "This user has been deleted successfully." 85 | } 86 | 87 | @app.get("/courses", tags=["Courses"]) 88 | def find_all_courses(): 89 | return "List all courses." 90 | -------------------------------------------------------------------------------- /model.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel, Field 2 | 3 | ## Models 4 | class UserList(BaseModel): 5 | id : str 6 | username : str 7 | password : str 8 | first_name: str 9 | last_name : str 10 | gender : str 11 | create_at : str 12 | status : str 13 | class UserEntry(BaseModel): 14 | username : str = Field(..., example="potinejj") 15 | password : str = Field(..., example="potinejj") 16 | first_name: str = Field(..., example="Potine") 17 | last_name : str = Field(..., example="Sambo") 18 | gender : str = Field(..., example="M") 19 | class UserUpdate(BaseModel): 20 | id : str = Field(..., example="Enter your id") 21 | first_name: str = Field(..., example="Potine") 22 | last_name : str = Field(..., example="Sambo") 23 | gender : str = Field(..., example="M") 24 | status : str = Field(..., example="1") 25 | class UserDelete(BaseModel): 26 | id: str = Field(..., example="Enter your id") -------------------------------------------------------------------------------- /pg_db.py: -------------------------------------------------------------------------------- 1 | import databases, sqlalchemy 2 | 3 | ## Postgres Database 4 | DATABASE_URL = "postgresql://usertest:usertest222@127.0.0.1:5432/dbtest" 5 | database = databases.Database(DATABASE_URL) 6 | metadata = sqlalchemy.MetaData() 7 | 8 | users = sqlalchemy.Table( 9 | "py_users", 10 | metadata, 11 | sqlalchemy.Column("id" , sqlalchemy.String, primary_key=True), 12 | sqlalchemy.Column("username" , sqlalchemy.String), 13 | sqlalchemy.Column("password" , sqlalchemy.String), 14 | sqlalchemy.Column("first_name", sqlalchemy.String), 15 | sqlalchemy.Column("last_name" , sqlalchemy.String), 16 | sqlalchemy.Column("gender" , sqlalchemy.CHAR ), 17 | sqlalchemy.Column("create_at" , sqlalchemy.String), 18 | sqlalchemy.Column("status" , sqlalchemy.CHAR ), 19 | ) 20 | 21 | engine = sqlalchemy.create_engine( 22 | DATABASE_URL 23 | ) 24 | metadata.create_all(engine) --------------------------------------------------------------------------------