123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #!/usr/bin/env python3
- from typing import List
- import models
- from tortoise.contrib.fastapi import register_tortoise
- from nicegui import app, ui
- register_tortoise(
- app,
- db_url='sqlite://db.sqlite3',
- modules={'models': ['models']}, # tortoise will look for models in this main module
- generate_schemas=True, # in production you should use version control migrations instead
- )
- @ui.refreshable
- async def list_of_users() -> None:
- async def delete(user: models.User) -> None:
- await user.delete()
- list_of_users.refresh()
- users: List[models.User] = await models.User.all()
- for user in reversed(users):
- with ui.card().classes('w-full'):
- with ui.row().classes('justify-between w-full items-center'):
- ui.input('Name', on_change=lambda u=user: u.save()).bind_value(user, 'name') \
- .on('blur', list_of_users.refresh)
- ui.input('Age', on_change=lambda u=user: u.save()).classes('w-20').bind_value(user, 'age') \
- .on('blur', list_of_users.refresh)
- ui.button(on_click=lambda u=user: delete(u), icon='delete') \
- .props('flat').classes('ml-auto')
- @ui.page('/')
- async def index():
- async def create() -> None:
- await models.User.create(name=name.value, age=age.value)
- name.value = ''
- age.value = None
- list_of_users.refresh()
- with ui.column().classes('w-96 mx-auto'):
- with ui.row().classes('w-full items-center px-4'):
- name = ui.input(label='Name')
- age = ui.number(label='Age', format='%.0f').classes('w-20')
- ui.button(on_click=create, icon='add').props('flat').classes('ml-auto')
- await list_of_users()
- ui.run()
|