Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 87df5f0

Browse files
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.
Lines changed: 26 additions & 0 deletions
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+
# }
Lines changed: 14 additions & 0 deletions
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‎

Lines changed: 6 additions & 11 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /