[PYTHON] Ein Verwaltungstool, das sofort mit dem REST-Framework ng-admin + Django erstellt werden kann

Ich habe versucht, ein Verwaltungstool mit Django REST Framework und ng-admin zu erstellen

Mit Ng-admin und [Django REST Framework](http: //www.django-rest) können Verwaltungstools mit REST API + Static Web implementiert werden. Ich habe versucht, -framework.org/) zu verwenden. Dieser Artikel richtet sich an Leser mit Erfahrung in Python und Javascript. Der Quellcode dieses Artikels wird im folgenden Repository veröffentlicht.

Einführung in die Bibliothek

--Django REST Framework: Ein Python-Webframework, mit dem REST-APIs einfach erstellt werden können. Wie der Name schon sagt, basiert es auf Django. --ng-admin: Javascript-Clientbibliothek, die auf Verwaltungstools spezialisiert ist. Dies hängt von Angularjs ab.

Serverkonfiguration

In der Abbildung ist die Serverkonfiguration natürlich wie folgt.

---------------------------
Static Web (127.0.0.1:8080) // ng-admin
---------------------------
           |
---------------------------
Web API    (127.0.0.1:8000) // REST framework
---------------------------

Umgebung

Es wird davon ausgegangen, dass Python 3.5.2 von Pyenv (pyenv-virtualenv) installiert wird. Nehmen Sie außerdem an, dass npm bereits installiert ist. Meine Umgebung ist übrigens macOS El Capitan.

Django REST framework

Installieren Sie das Django REST-Framework. Dieses Mal werde ich das vom Autor erstellte Repository verwenden.

  1. Holen Sie sich das Repository git clone https://github.com/algas/rest-admin-example.git
  2. Erstellen einer virtuellen Umgebung cd rest-admin-example && pyenv virtualenv 3.5.2 rest-admin-example
  3. Aktivieren Sie virtualenv pyenv activate rest-admin-example
  4. Installation abhängiger Bibliotheken pip install -U pip && pip install -r requirements.txt
  5. database migration
    cd tutorial && python manage.py migrate
  6. Erstellen Sie einen neuen Superuser python manage.py createsuperuser
    Folgen Sie der Anleitung und geben Sie Ihren Benutzernamen, Ihre E-Mail-Adresse und Ihr Passwort ein.

Wenn Sie Ihre eigene Umgebung von Grund auf neu erstellen möchten, lesen Sie bitte Schnellstart-Tutorial. Wir machen das gleiche wie in diesem Tutorial, abgesehen von einigen Fehlerkorrekturen.

ng-admin

  1. Verschieben Sie das aktuelle Verzeichnis cd ../js
  2. Installation abhängiger Bibliotheken npm install ng-admin --save

Stellen Sie sicher, dass Sie die obige "npm install" im js-Verzeichnis ausführen. Dies hängt vom Pfad zu den erstellten Knotenmodulen ab.

Starten Sie den Server

Bereiten Sie ein Terminal mit zwei Bildschirmen vor, um den Django-Server und den (statischen) Webserver getrennt zu starten.

Django REST framework

  1. Verschieben Sie das aktuelle Verzeichnis cd /path/to/rest-admin-example/tutorial
  2. Starten Sie den Server python manage.py runserver
  3. Funktionsprüfung Greifen Sie mit einem Browser auf Folgendes zu. http://127.0.0.1:8000/

ng-admin

Hier verwenden wir den Python 3 Standard-Webserver (http.server). Andere Webserver wie Nginx sind in Ordnung.

  1. Verschieben Sie das aktuelle Verzeichnis cd /path/to/rest-admin-example/js
  2. Starten Sie den Server python -m http.server 8080
  3. Funktionsprüfung Greifen Sie mit einem Browser auf Folgendes zu. http://127.0.0.1:8000/

Codekommentar

API

Es werden zwei API-Gruppen, Benutzer und Gruppen, definiert. Die Definition jedes Modells ist wie folgt.

User: url, username, email, groups Group: url, name

Benutzer können einer beliebigen Anzahl von Gruppen angehören. Die URL stellt einen Link zum erstellten API-Element dar. http://127.0.0.1:8000/users/1/ http://127.0.0.1:8000/groups/1/

Verwaltungsseite

Auf der Verwaltungsseite haben wir eine Funktion implementiert, um eine Liste von Benutzern und Gruppen anzuzeigen und ein neues Element zu erstellen. Diese Funktion ist in zwei Dateien implementiert: index.html und admin.js.

index.html


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Rest Admin Page</title>
        <link rel="stylesheet" href="node_modules/ng-admin/build/ng-admin.min.css">
    </head>
    <body ng-app="restAdmin">
        <div ui-view></div>
        <script src="node_modules/ng-admin/build/ng-admin.min.js" type="text/javascript"></script>
        <script src="admin.js" type="text/javascript"></script>
    </body>
</html>

Das Obige bezieht sich auf admin.js unten, zusätzlich zu js und css für ng-admin, die auf node_modules installiert sind.

admin.js


var restAdmin = angular.module('restAdmin', ['ng-admin']);
restAdmin.config(['NgAdminConfigurationProvider', function (nga) {
    var admin = nga.application('Rest Admin')
      .baseApiUrl('http://127.0.0.1:8000/');

    var group = nga.entity('groups').identifier(nga.field('url')).url(function(entityName, viewType, identifierValue, identifierName) {
        return 'groups/';
    });
    var groupFields = [
        nga.field('url'),
        nga.field('name')
    ]
    group.listView().fields(groupFields);
    group.creationView().fields(groupFields);
    admin.addEntity(group);

    var user = nga.entity('users').identifier(nga.field('url')).url(function(entityName, viewType, identifierValue, identifierName) {
        return 'users/';
    });
    var userFields = [
        nga.field('url'),
        nga.field('username'),
        nga.field('email'),
        nga.field('groups', 'json'),
    ]
    user.listView().fields(userFields);
    user.creationView().fields(userFields);
    admin.addEntity(user);

    nga.configure(admin);
}]);

Zunächst definieren wir http: //127.0.0.1: 8000 / als baseApiUrl. Als Nächstes definieren wir Benutzer und Gruppen als Entität. Die Standardspezifikation für ng-admin geht davon aus, dass der URI nicht mit einem Schrägstrich (/) endet. Die Django-Framework-Spezifikation enthält jedoch immer einen Schrägstrich (/) am Ende des URI. Daher haben wir eine URL-Funktion definiert, um diesen Unterschied auszugleichen. ListView und CreationView sind für Benutzer bzw. Gruppen definiert. Die Elemente von Gruppen in User werden in Array definiert, daher wird json als Feldtyp von ng-admin angegeben.

wichtiger Punkt

--CORS-Einstellungen Unter normalen Einstellungen kann die API JSON aufgrund eines Problems mit der gemeinsamen Nutzung von Ressourcen nicht an ng-admin übergeben. Wir umgehen dieses Problem mit "django_cors_middleware". Da es in settings.py festgelegt ist, ist keine spezielle Aktion erforderlich, wenn auf das Repository des Autors verwiesen wird.

Verschiedene Gefühle

Da das Django REST-Framework selbst die Web-Benutzeroberfläche bereitstellt, können die Vorteile der Kombination mit ng-admin verwirrend sein. Das Django REST-Framework kann auch bequem allein verwendet werden. Natürlich kann ng-admin auch mit anderen Web-APIs arbeiten.

Recommended Posts

Ein Verwaltungstool, das sofort mit dem REST-Framework ng-admin + Django erstellt werden kann
Grundlagen des Django REST-Frameworks
Tipps zum Django Rest Framework
Django REST Framework Stolperstein
Django REST Framework mit Vue.js
Melden Sie sich mit dem Django Rest Framework an
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
Logisches Löschen in Django, DRF (Django REST Framework)
Verstehen Sie den Komfort des Django Rest Framework
CRUD GET mit Nuxt & Django REST Framework ②
Verschiedene Hinweise zum Django REST-Framework
CRUD POST mit Nuxt & Django REST Framework
CRUD GET mit Nuxt & Django REST Framework ①
Überlegungen zum Design von Django REST Framework + Clean Architecture
Django REST Framework Ein wenig nützlich zu wissen.
Implementieren Sie die JWT-Anmeldefunktion im Django REST-Framework
Implementierung der Authentifizierungsfunktion in Django REST Framework mit djoser
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Weitere neue Benutzerauthentifizierungsmethoden mit Django REST Framework
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Wenn Sie mit dem Django REST-Framework filtern möchten
Listenmethode für verschachtelte Ressourcen im Django REST-Framework
Implementieren Sie die API mit explosiver Geschwindigkeit mithilfe des Django REST Framework
[Django Rest Framework] Passen Sie die Filterfunktion mit Django-Filter an
Implementieren Sie hierarchische URLs mit drf-verschachtelten Routern im Django REST-Framework
Django Python Web Framework
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
Django Rest Framework Dekorateure `Action Decorator ersetzt list_route und detail_route`