Bereaksi-admin dan kerangka istirahat Django

Baru-baru ini menemukan sebuah artikel tentang react-admin , saya memutuskan untuk mencoba jenis binatang apa itu. Sangat menarik untuk mengikat ini ke hutan, untungnya ada dataprovider untuk kerangka kerja lainnya .

Tetapi pertama-tama Anda harus mengirimkan panel admin sebagai api. Pada prinsipnya, ini mudah dilakukan dengan bantuan set tampilan, yang dapat dihasilkan secara otomatis dengan melalui model-model dari panel admin.

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 ) 

Bahkan diferensiasi hak berhasil di luar kotak!



Reaksi-admin bekerja di luar kotak. Berkat ListGuesser, EditGuesser, dll, formulir dibuat secara otomatis.





Saya ingin membuat mereka lebih dekat ke model berdasarkan data dari opsi drf, tetapi saya tidak bisa segera mengetahuinya, saya meninggalkan tugas untuk nanti (permintaan tarik dipersilahkan).

Untuk membuatnya lebih mudah untuk mengumpulkan statika untuk bagian depan, saya membuat perintah manajemen kecil

 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') 

Untuk mencoba, cukup tambahkan 'django_react_admin' ke INSTALLED_APPS dan tambahkan 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)), ] 

Proyek itu sendiri di GitHub

Umumnya panel admin dalam bentuk api sangat berguna. Anda dapat, misalnya, membuat aplikasi seluler menggunakan teks asli.

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


All Articles