1
0

main.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/env python3
  2. from typing import List
  3. import models
  4. from tortoise.contrib.fastapi import register_tortoise
  5. from nicegui import app, ui
  6. register_tortoise(
  7. app,
  8. db_url='sqlite://db.sqlite3',
  9. modules={'models': ['models']}, # tortoise will look for models in this main module
  10. generate_schemas=True, # in production you should use version control migrations instead
  11. )
  12. @ui.refreshable
  13. async def list_of_users() -> None:
  14. async def delete(user: models.User) -> None:
  15. await user.delete()
  16. list_of_users.refresh()
  17. users: List[models.User] = await models.User.all()
  18. for user in reversed(users):
  19. with ui.card().classes('w-full'):
  20. with ui.row().classes('justify-between w-full items-center'):
  21. ui.input('Name', on_change=lambda u=user: u.save()).bind_value(user, 'name') \
  22. .on('blur', list_of_users.refresh)
  23. ui.input('Age', on_change=lambda u=user: u.save()).classes('w-20').bind_value(user, 'age') \
  24. .on('blur', list_of_users.refresh)
  25. ui.button(on_click=lambda u=user: delete(u), icon='delete') \
  26. .props('flat').classes('ml-auto')
  27. @ui.page('/')
  28. async def index():
  29. async def create() -> None:
  30. await models.User.create(name=name.value, age=age.value)
  31. name.value = ''
  32. age.value = None
  33. list_of_users.refresh()
  34. with ui.column().classes('w-96 mx-auto'):
  35. with ui.row().classes('w-full items-center px-4'):
  36. name = ui.input(label='Name')
  37. age = ui.number(label='Age', format='%.0f').classes('w-20')
  38. ui.button(on_click=create, icon='add').props('flat').classes('ml-auto')
  39. await list_of_users()
  40. ui.run()