Skip to content

Commit 87df5f0

Browse files
committed
Now exchanging data with viewmodels.
1 parent f6c6c89 commit 87df5f0

File tree

5 files changed

+46
-11
lines changed

5 files changed

+46
-11
lines changed

code/ch5-viewmodels/services/package_service.py

Whitespace-only changes.

code/ch5-viewmodels/services/user_service.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import List
2+
3+
from starlette.requests import Request
4+
5+
from viewmodels.shared.viewmodel import ViewModelBase
6+
7+
8+
class IndexViewModel(ViewModelBase):
9+
def __init__(self, request: Request):
10+
super().__init__(request)
11+
12+
self.release_count: int = 1
13+
self.user_count: int = 2
14+
self.package_count: int = 3
15+
self.packages: List = []
16+
17+
# {
18+
# 'package_count': 274_000,
19+
# 'release_count': 2_234_847,
20+
# 'user_count': 73_874,
21+
# 'packages': [
22+
# {'id': 'fastapi', 'summary': "A great web framework"},
23+
# {'id': 'uvicorn', 'summary': "Your favorite ASGI server"},
24+
# {'id': 'httpx', 'summary': "Requests for an async world"},
25+
# ]
26+
# }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from typing import Optional
2+
3+
from starlette.requests import Request
4+
5+
6+
class ViewModelBase:
7+
8+
def __init__(self, request: Request):
9+
self.request: Request = request
10+
self.error: Optional[str] = None
11+
self.user_id: Optional[int] = None
12+
13+
def to_dict(self) -> dict:
14+
return self.__dict__

code/ch5-viewmodels/views/home.py

+6-11
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import fastapi
22
from fastapi_chameleon import template
3+
from starlette.requests import Request
4+
5+
from viewmodels.home.indexviewmodel import IndexViewModel
36

47
router = fastapi.APIRouter()
58

69

710
@router.get('/')
811
@template()
9-
def index():
10-
return {
11-
'package_count': 274_000,
12-
'release_count': 2_234_847,
13-
'user_count': 73_874,
14-
'packages': [
15-
{'id': 'fastapi', 'summary': "A great web framework"},
16-
{'id': 'uvicorn', 'summary': "Your favorite ASGI server"},
17-
{'id': 'httpx', 'summary': "Requests for an async world"},
18-
]
19-
}
12+
def index(request: Request):
13+
vm = IndexViewModel(request)
14+
return vm.to_dict()
2015

2116

2217
@router.get('/about')

0 commit comments

Comments
 (0)