[PYTHON] Un outil administratif qui peut être créé immédiatement avec le framework ng-admin + Django REST

J'ai essayé de créer un outil d'administration avec le framework Django REST et ng-admin

Ng-admin et [Django REST framework](http: //www.django-rest) sont les moyens d'implémenter des outils de gestion avec l'API REST + Web statique. J'ai essayé d'utiliser -framework.org/). Cet article est destiné aux lecteurs expérimentés avec Python et Javascript. Le code source de cet article est publié dans le référentiel suivant.

Présentation de la bibliothèque

--Django REST framework: Un framework Web Python qui facilite la création d'API REST. Comme son nom l'indique, il est basé sur Django. --ng-admin: bibliothèque client Javascript spécialisée pour les outils administratifs. Cela dépend d'Angularjs.

Configuration du serveur

Il va sans dire que sur la figure, la configuration du serveur est la suivante.

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

Environnement

On suppose que Python 3.5.2 est installé par Pyenv (pyenv-virtualenv). Supposons également que npm est déjà installé. Au fait, mon environnement est macOS El Capitan.

Django REST framework

Installez le framework Django REST. Cette fois, j'utiliserai le référentiel préparé par l'auteur.

  1. Obtenez le référentiel git clone https://github.com/algas/rest-admin-example.git
  2. Création d'un environnement virtualenv cd rest-admin-example && pyenv virtualenv 3.5.2 rest-admin-example
  3. activer virtualenv pyenv activate rest-admin-example
  4. Installation de bibliothèques dépendantes pip install -U pip && pip install -r requirements.txt
  5. database migration
    cd tutorial && python manage.py migrate
  6. Créez un nouveau super utilisateur python manage.py createsuperuser
    Suivez le guide et entrez votre nom d'utilisateur, votre adresse e-mail et votre mot de passe.

Si vous souhaitez créer votre propre environnement à partir de zéro, veuillez vous référer au tutoriel de démarrage rapide. Nous faisons la même chose que ce tutoriel à l'exception de quelques corrections de bogues.

ng-admin

  1. Déplacer le répertoire actuel cd ../js
  2. Installation de bibliothèques dépendantes npm install ng-admin --save

Assurez-vous d'exécuter npm install ci-dessus dans le répertoire js. Cela dépend du chemin d'accès aux node_modules créés.

Démarrez le serveur

Préparez un terminal à deux écrans pour lancer le serveur Django et le serveur Web (statique) séparément.

Django REST framework

  1. Déplacer le répertoire actuel cd /path/to/rest-admin-example/tutorial
  2. Démarrez le serveur python manage.py runserver
  3. Contrôle de fonctionnement Accédez aux éléments suivants avec un navigateur. http://127.0.0.1:8000/

ng-admin

Ici, nous utilisons le serveur Web standard python 3 (http.server). D'autres serveurs Web tels que nginx fonctionnent bien.

  1. Déplacer le répertoire actuel cd /path/to/rest-admin-example/js
  2. Démarrez le serveur python -m http.server 8080
  3. Contrôle de fonctionnement Accédez aux éléments suivants avec un navigateur. http://127.0.0.1:8000/

Commentaire de code

API

Deux groupes d'API, utilisateurs et groupes, sont définis. La définition de chaque modèle est la suivante.

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

Les utilisateurs peuvent appartenir à n'importe quel nombre de groupes. url représente un lien vers l'élément API créé. http://127.0.0.1:8000/users/1/ http://127.0.0.1:8000/groups/1/

Page de gestion

Sur la page de gestion, nous avons implémenté une fonction pour afficher une liste d'utilisateurs et de groupes et créer un nouvel élément. Cette fonctionnalité est implémentée dans deux fichiers, index.html et 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>

Ce qui précède fait référence à admin.js ci-dessous, en plus de js et css de ng-admin installés dans node_modules.

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);
}]);

Tout d'abord, nous définissons http: //127.0.0.1: 8000 / comme baseApiUrl. Ensuite, nous définissons les utilisateurs et les groupes comme Entité. La spécification par défaut de ng-admin suppose que l'URI ne se termine pas par une barre oblique (/). Cependant, la spécification du framework django inclut toujours une barre oblique (/) à la fin de l'URI, nous avons donc défini une fonction url pour absorber cette différence. ListView et creationView sont respectivement définis pour les utilisateurs et les groupes. Les éléments des groupes dans User sont définis dans Array, donc json est spécifié comme type de champ de ng-admin.

point important

Sentiments divers

Étant donné que le framework Django REST lui-même fournit l'interface utilisateur Web, les avantages de sa combinaison avec ng-admin peuvent être déroutants. Le framework Django REST est également pratique à utiliser seul. Bien entendu, ng-admin peut également fonctionner avec d'autres API Web.

Recommended Posts

Un outil administratif qui peut être créé immédiatement avec le framework ng-admin + Django REST
Bases du framework Django REST
Astuces Django Rest Framework
Bloc d'achoppement du framework Django REST
Framework Django REST avec Vue.js
Connectez-vous avec Django Rest Framework
[Django] Utiliser MessagePack avec le framework Django REST
Suppression logique dans Django, DRF (Django REST Framework)
Comprendre la commodité de Django Rest Framework
CRUD GET avec Nuxt & Django REST Framework ②
Notes diverses sur le framework Django REST
CRUD POST avec Nuxt & Django REST Framework
CRUD GET avec Nuxt & Django REST Framework ①
Django REST Framework + Considération de conception d'architecture propre
Framework Django REST Un peu utile à savoir.
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Implémentation de la fonction d'authentification dans Django REST Framework à l'aide de djoser
Créer une application Todo avec Django REST Framework + Angular
Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
Essayez de créer une application Todo avec le framework Django REST
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Lorsque vous souhaitez filtrer avec le framework Django REST
List, méthode pour les ressources imbriquées dans le framework Django REST
Implémentez l'API à une vitesse explosive en utilisant Django REST Framework
[Django Rest Framework] Personnalisez la fonction de filtre à l'aide de Django-Filter
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Framework Web Django Python
Comment écrire une validation personnalisée dans Django REST Framework
Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Décorateurs du cadre de repos Django ʻaction decorator remplace list_route et detail_route`