Implémenter l'application Django sur Hy

Cet article est comme LISP, mais c'est l'article du 5ème jour de Python Part 2 Advent Calendar 2015.

Il y a une phrase "Django + LISP" dans le README de Hy. Le code source qui montre le concept selon lequel l'application Django peut être implémentée dans Hy est affiché, mais comme je ne sais pas quoi faire avec cela seul, je vais expliquer étape par étape à partir du lieu de démarrage du projet.

J'ai créé un référentiel sur github et j'ai poussé le commit séparément pour chaque étape, alors veuillez vous y référer.

démarrer le projet

Pour le moment, utilisez Python ordinaire pour django-admin.py start project. La version de Django que vous utilisez est la 1.9.

django-admin.py startproject hellohy

Ceci est le commit au stade de start project.

Réécrire «* .py» en «* .hy»

Tous les langages de programmation mènent à LISP, je voudrais donc éliminer le plus possible le code Python et le remplacer par Hy.

C'est le commit qui a réécrit le code immédiatement après avoir créé le projet dans Hy.

Il y a deux points sur lesquels je suis tombé un peu.

Voir ici pour savoir comment convertir Hy en ʻimport xde Python,from y import z`. C'est évident en un coup d'œil.

À ce stade, même si vous supprimez tous les fichiers py à l'exception de manage.py, python manage.py runserver fonctionnera et vous pourrez y accéder avec votre navigateur.

Créer ʻapp_template`

Après startproject, l'ajout d'un module d'application Django avec startapp est un flux standard de Django, mais à ce stade, il était clair qu'un module Python serait ajouté même avec startapp. Ajoutez d'abord le modèle d'application.

C'est ce commit.

Utilisez ce ʻapp_template pour exécuter startapp`.

python manage.py startapp --template=hellohy/app_template -ehy myapp

Le point est

--Spécifiez votre propre répertoire de modèles d'application avec --template. --Ajoutez l'extension du fichier à traiter comme modèle avec -e.

C'est.

Voici un commit qui a créé une application appelée myapp avec la commande ci-dessus et ajouté une vue qui affiche un modèle très simple appelé myapp.views.top.

Définir un modèle

Tutoriel Hy a un exemple de code de type Django, mais à ce stade Vous pouvez voir que ce n'est pas un pseudo code, mais un code qui fonctionne réellement.

Voici un commit qui ajoute un modèle pour afficher les données sur la base de données.

La définition du modèle est la suivante.

(import [django.db [models]]
        [django.utils.timezone :as timezone])

(defclass Topic [models.Model]
  [title (models.TextField)
   url (models.URLField)
   created_at (models.DateTimeField :default timezone.now)])

Considérez un Topic comme un objet qui représente l'URL de la source d'un titre d'actualité. Les points importants sont les suivants.

--def class utilise la dernière version de développement de la syntaxe Hy.

Après avoir défini le modèle, la procédure pour make migrations, migrate est la même que pour Django normal.

Mettre en œuvre la vue

Ceci est un exemple d'obtention de plusieurs objets Topic définis ci-dessus et de rendu du modèle.

(import [django.shortcuts [render]]
        [myapp.models [Topic]])

(defn top [req]
  (def topics (-> (Topic.objects.all)
                  (.order_by "-id")))
  (render req "top.html" {"topics" topics}))

Un exemple d'obtention d'un objet avec une clé primaire et de rendu d'un modèle.

(import [django.shortcuts [render]]
        [django.http [Http404]]
        [myapp.models [Topic]])

(defn topic_detial [req topic_id]
  (def topic (try
              (Topic.objects.get :pk topic_id)
              (except [e Topic.DoesNotExist](raise Http404))))
  (render req "topics/topic_detail.html" {"topic" topic}))

Je l'ai implémenté jusqu'au point d'ajouter une liste et une vue détaillée avec le commit suivant.

Test de l'unité

Je pense que l'avantage d'utiliser Django est qu'il est facile d'effectuer des tests unitaires, alors ajoutons également des tests unitaires cette fois-ci.

C'est ce commit.

J'aurais aimé pouvoir exécuter le test unitaire avec juste ce tests.hy, mais le testeur n'a pas trouvé le .hy, donc cela ressemble à un truc, mais le ciel avec le même nom. Le fichier .py de est ajouté.

J'aimerais faire quelque chose à propos de cette astuce, mais j'ai réussi le test pour le moment.

$ python manage.py test myapp
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.051s

OK
Destroying test database for alias 'default'...

finalement

J'ai présenté la procédure pour implémenter l'application Django sur Hy.

Si vous l'essayez vous-même, vous comprendrez que Hy peut faire ressortir toute la puissance de Django, vous pouvez donc sentir que tous les langages de programmation atteignent LISP.

La prochaine fois, j'aimerais explorer les possibilités de Hy à travers la méthode de déploiement de l'application Django écrite en Hy dans l'environnement réel.

Recommended Posts

Implémenter l'application Django sur Hy
Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
Déployer l'application Django sur Google App Engine (Python3)
Déployer l'application Django créée avec PTVS sur Azure
Comment déployer une application Django sur heroku en seulement 5 minutes
Déployer l'application Django sur Heroku [Partie 2]
Django: implémenter les paramètres d'application réutilisables suivant Django RestFrameWork
Remarques sur l'activation de PostgreSQL avec Django
Implémenter un modèle utilisateur personnalisé dans Django
Créer une application Todo avec Django ④ Implémenter la fonction de création de dossier et de tâche
Construire un environnement Django sur Raspai (MySQL)
Comment développer une application de panier avec Django
Jusqu'à ce que vous créiez une nouvelle application dans Django
Je souhaite télécharger une application Django sur heroku
Créer un planning Django
Créer une application Todo avec Django REST Framework + Angular
Lancer mon application Django
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Retour sur la création d'un service Web avec Django 1
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django --startapp
Initialiser l'application Django
Notes de céleri sur Django
Exécutez Django sur PythonAnywhere
Essayez de créer une application Todo avec le framework Django REST
Publiez votre application Django sur Amazon Linux + Apache + mod_wsgi
Comment créer un environnement Django (python) sur Docker
Étapes de l'installation de Python 3 à la création d'une application Django
Créer une application Todo avec Django ③ Créer une page de liste de tâches
Retour sur la création d'un service Web avec Django 2
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Expérience sur la page d'administration)
Qu'est-ce qu'un chien? Volume de démarrage de la création de l'application Django - startproject
Faire du modèle une chaîne sur le modèle HTML Django
Hello World avec Django
Comment utiliser Django avec Google App Engine / Python
Lancer Django sur un conteneur Docker à l'aide de docker-compose up
Notes diverses sur le déploiement de l'application django sur Heroku
À moi-même en tant que débutant Django (1) -Création d'un projet / application-
[kotlin] Créez une application de reconnaissance d'images en temps réel sur Android
Mémo quand Django est sorti sur VPS (préparation)
Démarrer un projet Django
Comment exécuter Django sur IIS sur un serveur Windows
À moi-même en tant que débutant Django (4) --Créer une application mémo-
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
Créez une application de gestion de partition shogi à l'aide de Django 4 ~ Créer une vue ~
Un aperçu rapide de votre profil dans l'appli django
Solution lorsque Django démarrer le projet n'est pas possible sous Windows
(Échec) Déployer une application Web créée avec Flask avec heroku
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 2)
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 3)
Créer une application Todo avec Django ① Créer un environnement avec Docker
Déployer l'application Django sur EC2 avec Nginx + Gunicorn + Supervisor
Implémenter un réseau neuronal à 3 couches
Implémenter la fonction de suivi dans Django
Un commentaire sur l'algorithme de Boruta
Créer une page d'accueil avec django
[Django] Remarques sur l'utilisation de django-debug-toolbar
Déployer l'application Masonite sur Heroku 2020
[Django] Créer un menu déroulant
Développement de l'environnement Django sur Windows 10