Skip to content

Commit 0b1ec58

Browse files
committed
Create a User model and API endpoints for creating and getting
1 parent 4d38f39 commit 0b1ec58

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

examples/demonstration/database.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from sqlalchemy import create_engine
2+
from sqlalchemy.ext.declarative import declarative_base
3+
from sqlalchemy.orm import sessionmaker
4+
5+
engine = create_engine(
6+
"sqlite:///./database.sqlite",
7+
connect_args={
8+
"check_same_thread": False,
9+
},
10+
)
11+
12+
Base = declarative_base()
13+
SessionLocal = sessionmaker(bind=engine, autoflush=False)
14+
15+
16+
def get_db():
17+
db = SessionLocal()
18+
try:
19+
yield db
20+
finally:
21+
db.close()

examples/demonstration/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22
from fastapi import FastAPI
33

44
from config import oauth2_config
5+
from database import Base
6+
from database import engine
57
from fastapi_oauth2.middleware import OAuth2Middleware
68
from fastapi_oauth2.router import router as oauth2_router
79
from router import router as app_router
810

11+
Base.metadata.create_all(bind=engine)
12+
913
router = APIRouter()
1014

1115
app = FastAPI()

examples/demonstration/models.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from sqlalchemy import Column
2+
from sqlalchemy import Integer
3+
from sqlalchemy import String
4+
from sqlalchemy.orm import Session
5+
6+
from database import Base
7+
8+
9+
class BaseModel(Base):
10+
__abstract__ = True
11+
12+
def save(self, db: Session):
13+
db.add(self)
14+
db.commit()
15+
db.refresh(self)
16+
return self
17+
18+
19+
class User(BaseModel):
20+
__tablename__ = "users"
21+
22+
id = Column(Integer, primary_key=True, index=True)
23+
username = Column(String)

examples/demonstration/router.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import json
22

3+
from fastapi import APIRouter
34
from fastapi import Depends
45
from fastapi import Request
5-
from fastapi import APIRouter
66
from fastapi.responses import HTMLResponse
77
from fastapi.templating import Jinja2Templates
8+
from sqlalchemy.orm import Session
89

10+
from database import get_db
911
from fastapi_oauth2.security import OAuth2
12+
from models import User
1013

1114
oauth2 = OAuth2()
1215
router = APIRouter()
@@ -19,5 +22,16 @@ async def root(request: Request):
1922

2023

2124
@router.get("/user")
22-
def user(request: Request, _: str = Depends(oauth2)):
25+
def user_get(request: Request, _: str = Depends(oauth2)):
2326
return request.user
27+
28+
29+
@router.get("/users")
30+
def users_get(request: Request, db: Session = Depends(get_db), _: str = Depends(oauth2)):
31+
return db.query(User).all()
32+
33+
34+
@router.post("/users")
35+
async def users_post(request: Request, db: Session = Depends(get_db), _: str = Depends(oauth2)):
36+
data = await request.json()
37+
return User(**data).save(db)

0 commit comments

Comments
 (0)