@@ -15,18 +15,21 @@ uvicorn
1515** app.py**
1616
1717``` python
18+ import typesystem
19+ import uvicorn
1820from starlette.applications import Starlette
1921from starlette.responses import JSONResponse
2022from starlette.routing import Route
21- import typesystem
22- import uvicorn
2323
2424users = []
2525
2626
27- class User (typesystem .Schema ):
28- username = typesystem.String(max_length = 100 )
29- is_admin = typesystem.Boolean(default = False )
27+ user_schema = typesystem.Schema(
28+ fields = {
29+ " username" : typesystem.String(max_length = 100 ),
30+ " is_admin" : typesystem.Boolean(default = False ),
31+ }
32+ )
3033
3134
3235async def list_users (request ):
@@ -39,7 +42,7 @@ async def add_user(request):
3942 if errors:
4043 return JSONResponse(dict (errors), status_code = 400 )
4144 users.append(user)
42- return JSONResponse(dict ( user) )
45+ return JSONResponse(user)
4346
4447
4548app = Starlette(debug = True , routes = [
@@ -62,7 +65,7 @@ Using typesystem for a simple Web submission page.
6265
6366```
6467aiofiles # Static files support
65- boostrap4 # Form templates & static files
68+ bootstrap4 # Form templates & static files
6669jinja2 # Form rendering
6770python-multipart # Form parsing
6871starlette
@@ -73,56 +76,55 @@ uvicorn
7376** app.py**
7477
7578``` python
79+ import typesystem
80+ import uvicorn
7681from starlette.applications import Starlette
7782from starlette.responses import RedirectResponse
78- from starlette.routing import Route, Mount
83+ from starlette.routing import Mount, Route
7984from starlette.staticfiles import StaticFiles
8085from starlette.templating import Jinja2Templates
81- import typesystem
82- import uvicorn
8386
8487forms = typesystem.Jinja2Forms(package = " bootstrap4" )
8588templates = Jinja2Templates(directory = " templates" )
8689statics = StaticFiles(directory = " statics" , packages = [" bootstrap4" ])
8790bookings = []
8891
8992
90- class BookingSchema (typesystem .Schema ):
91- start_date = typesystem.Date(title = " Start date" )
92- end_date = typesystem.Date(title = " End date" )
93- room = typesystem.Choice(
94- title = " Room type" ,
95- choices = [
96- (" double" , " Double room" ),
97- (" twin" , " Twin room" ),
98- (" single" , " Single room" ),
99- ],
100- )
101- include_breakfast = typesystem.Boolean(title = " Include breakfast" , default = False )
102-
103- def __str__ (self ):
104- breakfast = (
105- " (with breakfast)" if self .include_breakfast else " (without breakfast)"
106- )
107- return f " Booking for { self .room} from { self .start_date} to { self .end_date} "
93+ booking_schema = typesystem.Schema(
94+ fields = {
95+ " start_date" : typesystem.Date(title = " Start date" ),
96+ " end_date" : typesystem.Date(title = " End date" ),
97+ " room" : typesystem.Choice(
98+ title = " Room type" ,
99+ choices = [
100+ (" double" , " Double room" ),
101+ (" twin" , " Twin room" ),
102+ (" single" , " Single room" ),
103+ ],
104+ ),
105+ " include_breakfast" : typesystem.Boolean(
106+ title = " Include breakfast" , default = False
107+ ),
108+ }
109+ )
108110
109111
110112async def homepage (request ):
111- form = forms.Form(BookingSchema )
113+ form = forms.create_form(booking_schema )
112114 context = {" request" : request, " form" : form, " bookings" : bookings}
113115 return templates.TemplateResponse(" index.html" , context)
114116
115117
116118async def make_booking (request ):
117119 data = await request.form()
118- booking, errors = BookingSchema .validate_or_error(data)
120+ booking, errors = booking_schema .validate_or_error(data)
119121 if errors:
120- form = forms.Form(BookingSchema, values = data, errors = errors )
122+ form = forms.create_form(booking_schema )
121123 context = {" request" : request, " form" : form, " bookings" : bookings}
122124 return templates.TemplateResponse(" index.html" , context)
123125
124126 bookings.append(booking)
125- return RedirectResponse(request.url_for(" homepage" ))
127+ return RedirectResponse(request.url_for(" homepage" ), status_code = 303 )
126128
127129
128130app = Starlette(
0 commit comments