Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit 9f4a892

Browse files
committed
update examples and fix old issues
1 parent 5fd3ae2 commit 9f4a892

3 files changed

Lines changed: 40 additions & 34 deletions

File tree

examples/api/app.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1+
import uvicorn
12
from starlette.applications import Starlette
23
from starlette.responses import JSONResponse
34
from starlette.routing import Route
5+
46
import typesystem
5-
import uvicorn
67

78
users = []
89

910

10-
class User(typesystem.Schema):
11-
username = typesystem.String(max_length=100)
12-
is_admin = typesystem.Boolean(default=False)
11+
user_schema = typesystem.Schema(
12+
fields={
13+
"username": typesystem.String(max_length=100),
14+
"is_admin": typesystem.Boolean(default=False),
15+
}
16+
)
1317

1418

1519
async def list_users(request):
@@ -18,17 +22,19 @@ async def list_users(request):
1822

1923
async def add_user(request):
2024
data = await request.json()
21-
user, errors = User.validate_or_error(data)
25+
user, errors = user_schema.validate_or_error(data)
2226
if errors:
2327
return JSONResponse(dict(errors), status_code=400)
2428
users.append(user)
2529
return JSONResponse(dict(user))
2630

2731

28-
app = Starlette(routes=[
29-
Route('/', list_users, methods=["GET"]),
30-
Route('/', add_user, methods=["POST"]),
31-
])
32+
app = Starlette(
33+
routes=[
34+
Route("/", list_users, methods=["GET"]),
35+
Route("/", add_user, methods=["POST"]),
36+
]
37+
)
3238

3339

3440
if __name__ == "__main__":

examples/form/app.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
1+
import uvicorn
12
from starlette.applications import Starlette
23
from starlette.responses import RedirectResponse
3-
from starlette.routing import Route, Mount
4+
from starlette.routing import Mount, Route
45
from starlette.staticfiles import StaticFiles
56
from starlette.templating import Jinja2Templates
7+
68
import typesystem
7-
import uvicorn
89

910
forms = typesystem.Jinja2Forms(package="bootstrap4")
1011
templates = Jinja2Templates(directory="templates")
1112
statics = StaticFiles(directory="statics", packages=["bootstrap4"])
1213
bookings = []
1314

1415

15-
class BookingSchema(typesystem.Schema):
16-
start_date = typesystem.Date(title="Start date")
17-
end_date = typesystem.Date(title="End date")
18-
room = typesystem.Choice(
19-
title="Room type",
20-
choices=[
21-
("double", "Double room"),
22-
("twin", "Twin room"),
23-
("single", "Single room"),
24-
],
25-
)
26-
include_breakfast = typesystem.Boolean(title="Include breakfast", default=False)
27-
28-
def __str__(self):
29-
breakfast = (
30-
"(with breakfast)" if self.include_breakfast else "(without breakfast)"
31-
)
32-
return f"Booking for {self.room} from {self.start_date} to {self.end_date}"
16+
booking_schema = typesystem.Schema(
17+
fields={
18+
"start_date": typesystem.Date(title="Start date"),
19+
"end_date": typesystem.Date(title="End date"),
20+
"room": typesystem.Choice(
21+
title="Room type",
22+
choices=[
23+
("double", "Double room"),
24+
("twin", "Twin room"),
25+
("single", "Single room"),
26+
],
27+
),
28+
"include_breakfast": typesystem.Boolean(
29+
title="Include breakfast", default=False
30+
),
31+
}
32+
)
3333

3434

3535
async def homepage(request):
36-
form = forms.Form(BookingSchema)
36+
form = forms.create_form(booking_schema)
3737
context = {"request": request, "form": form, "bookings": bookings}
3838
return templates.TemplateResponse("index.html", context)
3939

4040

4141
async def make_booking(request):
4242
data = await request.form()
43-
booking, errors = BookingSchema.validate_or_error(data)
43+
booking, errors = booking_schema.validate_or_error(data)
4444
if errors:
45-
form = forms.Form(BookingSchema, values=data, errors=errors)
45+
form = forms.create_form(booking_schema)
4646
context = {"request": request, "form": form, "bookings": bookings}
4747
return templates.TemplateResponse("index.html", context)
4848

4949
bookings.append(booking)
50-
return RedirectResponse(request.url_for("homepage"))
50+
return RedirectResponse(request.url_for("homepage"), status_code=303)
5151

5252

5353
app = Starlette(

examples/form/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
aiofiles # Static files support
2-
boostrap4 # Form templates & static files
2+
bootstrap4 # Form templates & static files
33
jinja2 # Form rendering
44
python-multipart # Form parsing
55
starlette

0 commit comments

Comments
 (0)