Réact-admin et framework de repos django

Ayant récemment découvert un article sur react-admin , j'ai décidé d'essayer de quel genre de bête il s'agit. C'était intéressant de lier cela au jung, heureusement il y a un fournisseur de données pour le reste du framework .

Mais vous devez d'abord soumettre le panneau d'administration sous forme d'api. En principe, cela se fait facilement à l'aide d'ensembles de vues, qui peuvent être générés automatiquement en parcourant les modèles à partir du panneau d'administration.

def get_serializer_class(model): return type( f"{model.__name__}Serializer", (ModelSerializer,), {"Meta": type("Meta", (), {"model": model, "fields": "__all__"})}, ) for model, model_admin in admin.site._registry.items(): params = { "queryset": model.objects.all(), "filter_backends": [DjangoFilterBackend, OrderingFilter], "info": action(methods=["get"], detail=False)(get_info(model_admin)), "serializer_class": get_serializer_class(model), "basename": model._meta.model_name, "request": r, "fields": list(model_admin.get_fields(r)), "list_display": list(model_admin.get_list_display(r)), "ordering_fields": list(model_admin.get_sortable_by(r)), "filterset_fields": list(model_admin.get_list_filter(r)), "permission_classes": [permissions.IsAdminUser, permissions.DjangoModelPermissions], "pagination_class": CustomPageNumberPagination } viewset = type(f"{model.__name__}ViewSet", (viewsets.ModelViewSet,), params) router.register( f"{model._meta.app_label}/{model._meta.model_name}", viewset ) 

Même la différenciation des droits fonctionne dès le départ!



react-admin fonctionne immédiatement. Grâce à ListGuesser, EditGuesser, etc., les formulaires sont créés automatiquement.





Je voudrais les rapprocher du modèle en fonction des données des options drf, mais je ne pouvais pas le comprendre tout de suite, j'ai laissé la tâche pour plus tard (les demandes de tirage sont les bienvenues).

Pour faciliter la collecte de données statiques pour le front, j'ai créé une petite commande de gestion

 import subprocess, os, sys from django.core.management.base import BaseCommand from django.core import management class Command(BaseCommand): help = 'Build react-admin' def handle(self, *args, **options): cwd = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../src') ps = subprocess.Popen("yarn install", shell=True, cwd=cwd) ps.wait() and sys.exit(1) ps = subprocess.Popen("yarn build", shell=True, cwd=cwd) ps.wait() and sys.exit(1) management.call_command('collectstatic') 

Pour essayer, ajoutez simplement 'django_react_admin' à INSTALLED_APPS et ajoutez des URL:

 from django_react_admin import urls from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('react_admin/', include(urls.urlpatterns)), ] 

Le projet lui-même sur GitHub

Généralement, le panneau d'administration sous forme d'api est très utile. Vous pouvez, par exemple, créer une application mobile sur nativescript.

Source: https://habr.com/ru/post/fr478802/


All Articles