Django Flutter Framework.
Project description
Just married!!!
Django and Flutter.
Rapid developing db based app. Zero boilerplate code.
I hate boilerplate code. I hated it all my life. I made so many steps to remove this mental parasites far from me. And now, with Flet and Django I'm so close to get my ideal. For this moment I made as PoC a clone of a standard Flet ToDo application. All what i change is write all directly inside of Django. Flet code is run directly on the backend, so we not need any dedicated communication layer. Next what I done is generic data table control. This is a simple control able to create a data table for any Django model. All with searching and sorting.
Roadmap:
- Create package for a framework
- Create environment for generic Flutter app
- GenericApp class for a new Flutter application
- GenericPage class for a new Flutter application instance
- GenericView class to easily create routed Flutter views
- Generic middleware class for flexible management of Flutter view routing process
- UrlsMiddleware class for implementing Django urls based routing
- Generic navigation mechanism
- Create authorisation and permissions middleware
- AuthApp for apps with authorization
- AuthMiddleware for authorisation management
- Create generic list view for any Django model
- Generic model's, data table based, control
- Generic form based on Django forms
- Create generic form for any Django model
- Manage relations between models
Instalation
-
Install python package:
$ pip install flet-django
-
Add 'flet_django' to INSTALLED_APPS in settings.py:
INSTALLED_APPS += ['flet_django']
Run and usage
- Create main function in file main_app.py
import flet as ft
from flet_django.pages import GenericApp
...
main = GenericApp(
controls=[ft.Text("Hello World!")],
view_params=view_params
)
-
GenericApp instance is a GenericPage instances factory, can be use directly as main function for flet application.
-
To run function main from file main_app.py use django command:
$ python manage.py run_app
Flutter view
- A framework based on flutter views. Flutter view is a function which takes page as a first argument, and returns instance of flet.View class.
- For simplicity we can use ft_view factory
- Let create a simple flutter view example in file main_app.py:
import flet as ft
from flet_django.views import ft_view
def home(page):
return ft_view(
page,
controls=[ft.Text("Hello World!")],
app_bar_params=dict(title="ToDo app")
)
- Flutter view can be assigned to route by Generic App's urls parameter, or as a target for navigation:
import flet as ft
from django.urls import path
from flet_django.views import ft_view
from flet_django.pages import GenericApp
from flet_django.navigation import Fatum
def home(page):
return ft_view(
page,
controls=[ft.Text("Hello World!")],
app_bar_params=dict(title="ToDo app")
)
destinations = [
Fatum("/",
icon=ft.icons.HOME,
selected_icon=ft.icons.HOME_OUTLINED,
label="home",
nav_bar=True,
action=True,
nav_rail=False
),
]
urlpatterns = [
path('', home, name="home")
]
main = GenericApp(
destinations=destinations,
urls=urlpatterns,
init_route="/"
)
- To run application on other devices you need establish server and build client, based on Flutter frontend project from repository
- To run app as server use --view parameter:
python manage.py run_app --view flet_app_hidden
- Server will be avaible as http://$APP_HOST:$APP_PORT, for example:
open http://ala.hipisi.org.pl:8085
- Compile ./frontend futter app to have separate ready to install application:
cd frontend
flutter run --dart-entrypoint-args http://94.23.247.130:8085
- You can use simple script to run separate flutter application:
python run.py
Demo
You can run repository's project as example of usage. Working demo is here.
Screenshots
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for flet_django-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d42bd6cadb0031e99e8e1f56fac88fd89903e53e9eebaf2a4f658c4f47e4e0ba |
|
MD5 | be14e1f7e7aec1a344592e577b96402b |
|
BLAKE2b-256 | 4ce9df434370c4be991604045653f3a5f565c2c828a76db5b735483b6a4ac803 |