Nowość w Django i jeszcze nowsza w ReactJS. Zaglądałem do AngularJS i ReactJS, ale zdecydowałem się na ReactJS. Wydawało się, że wyprzedza AngularJS pod względem popularności, mimo że AngularJS ma większy udział w rynku, a ReactJS jest szybszy do odbioru.
Pomijając te wszystkie śmieci, zacząłem brać udział w kursie Udemy i po kilku filmach wydawało się ważne, aby zobaczyć, jak dobrze integruje się z Django. Wtedy nieuchronnie uderzam w ścianę, tylko ją uruchamiając, jaka jest dokumentacja, żebym nie kręcił kołami przez kilka godzin i nocy.
Naprawdę nie ma żadnych kompleksowych samouczków ani pip
pakietów, na które się natknąłem. Na przykład kilka, na które się natknąłem, nie działało lub było datowanych pyreact
.
Pomyślałem, że po prostu potraktować ReactJS całkowicie osobno, ale biorąc pod uwagę klasy i identyfikatory, w których chcę renderować komponenty ReactJS. Po skompilowaniu oddzielnych komponentów ReactJS do pojedynczego pliku ES5, po prostu zaimportuj ten pojedynczy plik do Django szablon.
Myślę, że to szybko się załamie, kiedy przejdę do renderowania z modeli Django, chociaż Django Rest Framework wydaje się być w to zaangażowany. Nie na tyle daleko, by zobaczyć, jak Redux wpływa na to wszystko.
W każdym razie, czy ktoś ma jasny sposób, w jaki używa Django i ReactJS, którymi chce się podzielić?
W każdym razie dokumentacja i samouczki są obfite dla AngularJS i Django, więc kuszące jest, aby po prostu pójść tą drogą, aby rozpocząć pracę z dowolnym frameworkiem front-end ... Nie jest to najlepszy powód.
Odpowiedzi:
Nie mam doświadczenia z Django, ale koncepcje od front-endu do back-endu i front-end framework do frameworka są takie same.
Oto kilka rzeczy, które znalazłem w sieci, które powinny pomóc (na podstawie szybkiego wyszukiwania w Google):
Mam nadzieję, że to poprowadzi Cię we właściwym kierunku! Powodzenia! Mam nadzieję, że inni specjalizujący się w Django mogą dodać do mojej odpowiedzi.
źródło
{% render_bundle 'main' %}
jest zła i powinna być{% render_bundle "main" %}
.Czuję twój ból, gdy ja też zaczynam, aby Django i React.js współpracowały. Wykonałem kilka projektów Django i myślę, że React.js świetnie pasuje do Django. Jednak rozpoczęcie może być onieśmielające. Stoimy tu na ramionach gigantów;)
Oto jak myślę, wszystko działa razem (duży obraz, proszę, niech ktoś mnie poprawi, jeśli się mylę).
Komunikacja między Django a „frontendem” odbywa się za pośrednictwem struktury Rest. Upewnij się, że masz autoryzację i uprawnienia do struktury Rest.
Znalazłem dobry szablon kotła dla dokładnie tego scenariusza i działa po wyjęciu z pudełka. Po prostu postępuj zgodnie z readme https://github.com/scottwoodall/django-react-template, a gdy skończysz, masz uruchomiony całkiem niezły projekt Django Reactjs. W żadnym wypadku nie jest to przeznaczone do celów produkcyjnych, ale raczej jako sposób, abyś mógł zagłębić się i zobaczyć, jak wszystko jest połączone i działa!
Jedna drobna zmiana, którą chciałbym zasugerować, jest następująca: postępuj zgodnie z instrukcjami konfiguracji, ALE zanim przejdziesz do drugiego kroku, aby skonfigurować backend (Django tutaj https://github.com/scottwoodall/django-react-template/blob/master /backend/README.md ), zmień plik wymagań dla instalacji.
Plik znajdziesz w swoim projekcie pod adresem /backend/requirements/common.pip. Zastąp jego zawartość tym
w ten sposób otrzymasz najnowszą stabilną wersję Django i jego frameworka Rest.
Mam nadzieję że to pomogło.
źródło
Jak odpowiedzieli ci inni, jeśli tworzysz nowy projekt, możesz oddzielić frontend i backend i użyć dowolnej wtyczki django rest, aby utworzyć rest api dla swojej aplikacji frontendowej. To jest w idealnym świecie.
Jeśli masz projekt z już utworzonym szablonem django, musisz załadować swój react dom render na stronie, na której chcesz załadować aplikację. W moim przypadku miałem już django-pipeline i właśnie dodałem rozszerzenie browserify. ( https://github.com/j0hnsmith/django-pipeline-browserify )
Jak w przykładzie, załadowałem aplikację za pomocą django-pipeline:
Twój „ entry-point.browserify.js ” może być plikiem ES6, który wczytuje Twoją aplikację React w szablonie:
W swoim szablonie django możesz teraz łatwo załadować swoją aplikację:
Zaletą korzystania z django-pipeline jest to, że statystyki są przetwarzane podczas
collectstatic
.źródło
Pierwsze podejście polega na zbudowaniu oddzielnych aplikacji Django i React. Django będzie odpowiedzialne za obsługę API zbudowanego przy użyciu frameworka Django REST, a React będzie korzystał z tych API przy użyciu klienta Axios lub API pobierania przeglądarki. Będziesz potrzebował dwóch serwerów, zarówno w fazie rozwoju, jak i produkcji, jeden dla Django (REST API), a drugi dla React (do obsługi plików statycznych) .
Drugie podejście różni się tym, że aplikacje frontendowe i backendowe będą połączone . Zasadniczo będziesz używać Django zarówno do obsługi interfejsu użytkownika React, jak i do ujawniania REST API. Musisz więc zintegrować React i Webpack z Django, oto kroki, które możesz wykonać, aby to zrobić
Najpierw wygeneruj projekt Django, a następnie w tym katalogu projektu wygeneruj swoją aplikację React za pomocą interfejsu wiersza polecenia React
Dla projektu Django zainstaluj django-webpack-loader za pomocą pip:
Następnie dodaj aplikację do zainstalowanych aplikacji i skonfiguruj ją
settings.py
, dodając następujący obiektNastępnie dodaj szablon Django, który zostanie użyty do zamontowania aplikacji React i będzie obsługiwany przez Django
Następnie dodaj adres URL,
urls.py
aby wyświetlić ten szablonJeśli w tym momencie uruchomisz zarówno serwery Django, jak i React, pojawi się błąd Django z informacją, że plik
webpack-stats.json
nie istnieje. Następnie musisz sprawić, by aplikacja React mogła generować plik statystyk.Śmiało i przejdź do aplikacji React, a następnie zainstaluj
webpack-bundle-tracker
Następnie usuń konfigurację pakietu Webpack i przejdź do,
config/webpack.config.dev.js
a następnie dodajTo dodaje wtyczkę BundleTracker do Webpacka i poinstruuje go, aby wygenerował
webpack-stats.json
w folderze nadrzędnym.Upewnij się, że zrobisz to samo w
config/webpack.config.prod.js
produkcji.Teraz, jeśli ponownie uruchomisz serwer React,
webpack-stats.json
zostanie wygenerowany i Django będzie mógł go wykorzystać, aby znaleźć informacje o pakietach Webpack wygenerowanych przez serwer deweloperski React.Jest jeszcze kilka rzeczy do zrobienia. Więcej informacji znajdziesz w tym samouczku .
źródło
npm run build
express
serwer, który będzie obsługiwał statyczne pliki JS React, a pliki JS wykonywałyby żądanie Ajax w celu pobrania danych z serwera Django. Przeglądarka najpierw trafia naexpress
serwer, nie ma pojęcia o Django. Mam rację? Czy przy takim podejściu można wykonać renderowanie po stronie serwera?Uwaga dla każdego, kto pochodzi z roli backendowej lub opartej na Django i próbuje pracować z ReactJS: Nikt nie jest w stanie pomyślnie skonfigurować środowiska ReactJS za pierwszym razem :)
Istnieje blog od Owais Lone, który jest dostępny pod adresem http://owaislone.org/blog/webpack-plus-reactjs-and-django/ ; jednak składnia konfiguracji WebPacka jest nieaktualna.
Proponuję wykonać kroki wymienione na blogu i zastąpić plik konfiguracyjny pakietu internetowego poniższą zawartością. Jeśli jednak nie znasz Django i Reacta, przeżuwaj pojedynczo ze względu na krzywą uczenia się, prawdopodobnie będziesz sfrustrowany.
źródło
Przyjęta odpowiedź prowadzi mnie do przekonania, że oddzielenie backendu Django i interfejsu React jest właściwą drogą bez względu na wszystko. W rzeczywistości istnieją podejścia, w których React i Django są połączone, co może być lepiej dostosowane do określonych sytuacji.
Ten poradnik dobrze to wyjaśnia. W szczególności:
źródło
Możesz wypróbować następujący samouczek, który może pomóc ci przejść dalej:
Razem obsługujemy Reacta i Django
źródło
Wiem, że spóźnia się to kilka lat, ale udostępniam to następnej osobie w tej podróży.
GraphQL okazał się pomocny i znacznie łatwiejszy w porównaniu do DjangoRESTFramework. Jest również bardziej elastyczny pod względem otrzymywanych odpowiedzi. Dostajesz to, o co prosisz i nie musisz filtrować odpowiedzi, aby uzyskać to, czego chcesz.
Możesz używać Graphene Django po stronie serwera i React + Apollo / Relay ... Możesz się temu przyjrzeć, bo to nie jest twoje pytanie.
źródło