Refactor Applicazione Django - split monolith in API REST e frontend

0

Sono in fase di refactoring di un'app web Django. È scritto nel solito stile MVT e mi piacerebbe cambiarlo per un approccio REST + frontend. Nella mia prima iterazione vorrei fare il minor numero possibile di cambiamenti. Il mio piano è:

  • suddivide il backend nell'API REST e una semplice applicazione Django rivolta verso il cliente (il nuovo "frontend")
  • business logic nell'API REST
  • il frontend Django "parlava con l'API REST per eseguire operazioni e raccogliere dati
  • API REST con Django REST Framework (DRF), mantenendo i modelli correnti e con poche modifiche alle viste.
  • tieni il maggior numero possibile di modelli Django per il frontend. Cioè, non voglio introdurre alcuna nuova tecnologia per il frontend (nessun framework SPA Javascript AngularJs, EmberJs o React)

In seguito iterazioni del refactoring verrebbero probabilmente spostate su una React SPA supportata dall'applicazione DRF.

È possibile avere una conversazione "frontend" di Django con un'API REST?

    
posta dangonfast 28.02.2018 - 06:52
fonte

1 risposta

1

Is it possible to have a Django "frontend" talk to a REST api?

Per prima cosa, sposta i dati su un CMS senza testa. Quindi aggiungi un token API al CMS senza testa in settings.py:

/webapp/settings.py
# Storyblok configuration for your own space
STORYBLOK_CONFIGURATION = {
  'PRIVATE_TOKEN': 'YOUR_PREVIEW_TOKEN',
  'HOME_SLUG': 'home'
}

Quindi imposta il tuo livello di vista Django in modo che ogni modello sia mappato a un Endpoint API . Separare le risorse statiche su un server separato e le richieste proxy ad esso. Ad esempio:

/webapp/views/ All your layouts and components at one space - if you add a new or change an existing Jinja2 component (.html.j2) the gulp build will trigger an instant reload for you in the browser - also each component is a representation of a storyblok component. If you create a headline component in storyblok - make sure to create a headline.html.j2 as well - so the django application knows which component to render.

The counter part to the component in Storyblok is right in your already downloaded python project. you can find the teaser.html.j2 in the /webapp/views/components/ folder. We’re using jinja2 for the templates - you can, of course, change this with any other templating engine you want. For this example that's how the teaser.html.j2 looks like:

<div class="teaser">
  <!--
  The _editable attribute makes the next
  DOM-element clickable so the sidebar can
  show the right component.
  -->
  {{ blok._editable|safe }}
  <div class="teaser__inner">
    <h1>
      <!--
      You can access every attribute you
      define in the schema in the blok variable
      -->
    {{ blok.headline }}
    </h1>
    <h2>
        You can create new components like this, to create your own set of components.
    </h2>
  </div>
</div>

Riferimenti

risposta data 08.05.2018 - 16:41
fonte

Leggi altre domande sui tag