[PYTHON] Implementieren Sie die Django-App auf Hy

Dieser Artikel ähnelt LISP, ist jedoch der Artikel zum 5. Tag von Python Part 2 Adventskalender 2015.

In der README von Hy befindet sich ein Satz "Django + LISP". Der Quellcode zeigt das Konzept, dass die Django-App in Hy implementiert werden kann, aber ich weiß nicht, was ich damit allein tun soll, daher werde ich Schritt für Schritt vom Ort des "Projektstarts" aus erklären.

Ich habe ein Repository auf Github erstellt und das Commit für jeden Schritt separat verschoben. Bitte beziehen Sie sich darauf.

Projekt starten

Verwenden Sie vorerst gewöhnliches Python für django-admin.py start project. Die von Ihnen verwendete Version von Django ist 1.9.

django-admin.py startproject hellohy

Dies ist das Commit in der Phase des "Startprojekts".

Schreiben Sie "* .py" in "* .hy" um

Alle Programmiersprachen führen zu LISP, daher möchte ich Python-Code so weit wie möglich entfernen und durch Hy ersetzen.

Dies ist das Commit, mit dem der Code unmittelbar nach dem Erstellen des Projekts für Hy neu geschrieben wurde.

Es gibt zwei Punkte, auf die ich ein wenig gestoßen bin.

Unter hier erfahren Sie, wie Sie Hy für import x und from y import z in Python konvertieren. Es ist auf einen Blick offensichtlich.

Selbst wenn Sie zu diesem Zeitpunkt alle "py" -Dateien mit Ausnahme von "manage.py" löschen, funktioniert "python manage.py runserver" und Sie können tatsächlich mit Ihrem Browser darauf zugreifen.

Erstellen Sie app_template

Nach "startproject" ist das Hinzufügen eines Django-Anwendungsmoduls mit "startapp" ein Standardfluss von Django, aber zu diesem Zeitpunkt war klar, dass ein Python-Modul auch mit "startapp" hinzugefügt werden würde. Fügen Sie zuerst die Anwendungsvorlage hinzu.

Das ist dieses Commit.

Verwenden Sie diese app_template, um startapp auszuführen.

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

Der Punkt ist

Das ist.

Hier ist ein Commit, das mit dem obigen Befehl eine Anwendung namens "myapp" erstellt und eine Ansicht hinzugefügt hat, in der eine sehr einfache Vorlage mit dem Namen "myapp.views.top" angezeigt wird.

Definieren Sie ein Modell

Hy Tutorial enthält Django-Modell-ähnlichen Beispielcode, jedoch zu diesem Zeitpunkt Sie können sehen, dass es sich nicht um einen Pseudocode handelt, sondern um einen Code, der tatsächlich funktioniert.

Hier ist ein Commit, das ein Modell hinzufügt, um die Daten in der Datenbank anzuzeigen.

Die Definition des Modells lautet wie folgt.

(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)])

Stellen Sie sich ein Thema als ein Objekt vor, das die URL der Quelle für einen Nachrichtentitel darstellt. Die wichtigen Punkte sind wie folgt.

--def class verwendet die neueste Entwicklungsversion der Hy-Syntax. --Klasseneigenschaften werden in einer Liste für das dritte Argument des Makros def class angegeben

Nach dem Definieren des Modells ist das Verfahren für "Migrationen durchführen" und "Migrieren" dasselbe wie für normales Django.

Implementieren Sie die Ansicht

Dies ist ein Beispiel für das Abrufen mehrerer oben definierter "Topic" -Objekte und das Rendern der Vorlage.

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

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

Ein Beispiel für das Abrufen eines Objekts mit einem Primärschlüssel und das Rendern einer Vorlage.

(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}))

Ich habe es bis zum Hinzufügen einer Listen- und Detailansicht mit dem folgenden Commit implementiert.

Gerätetest

Ich denke, dass der Vorteil von Django darin besteht, dass es einfach ist, Unit-Tests durchzuführen. Fügen wir also auch dieses Mal Unit-Tests hinzu.

Das ist dieses Commit.

Ich wünschte, ich könnte den Unit-Test nur mit diesem tests.hy durchführen, aber der Testläufer hat das .hy nicht gefunden, also fühlt es sich wie ein Trick an, aber der Himmel mit dem gleichen Namen. Die .py-Datei von wird hinzugefügt.

Ich würde gerne etwas gegen diesen Trick unternehmen, aber ich habe den Test vorerst bestanden.

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

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

Schließlich

Ich habe das Verfahren zur Implementierung der Django-App auf Hy eingeführt.

Wenn Sie es selbst versuchen, werden Sie verstehen, dass Hy die volle Leistung von Django entfalten kann, sodass Sie das Gefühl haben, dass alle Programmiersprachen LISP erreichen.

Das nächste Mal möchte ich die Möglichkeiten von Hy anhand der Methode zur Bereitstellung der in Hy geschriebenen Django-App in der realen Umgebung untersuchen.

Recommended Posts

Implementieren Sie die Django-App auf Hy
Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
Stellen Sie die Django-Anwendung in Google App Engine (Python3) bereit.
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Django: Implementieren Sie wiederverwendbare APP-Einstellungen nach Django RestFrameWork
Hinweise zum Aktivieren von PostgreSQL mit Django
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
So entwickeln Sie eine Cart-App mit Django
Bis Sie eine neue App in Django erstellen
Ich möchte eine Django-App auf Heroku hochladen
Erstellen Sie einen Django-Zeitplan
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Starten Sie meine Django-App
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Was ist ein Hund? Startvolumen der Django-App erstellen --startapp
Initialisieren Sie die Django-App
Sellerie-Notizen zu Django
Führen Sie Django auf PythonAnywhere aus
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Veröffentlichen Sie Ihre Django-App unter Amazon Linux + Apache + mod_wsgi
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Schritte von der Installation von Python 3 bis zur Erstellung einer Django-App
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Was ist ein Hund? Django App Creation Start Volume - Startprojekt
Machen Sie das Modell zu einer Zeichenfolge in der Django-HTML-Vorlage
Hallo Welt mit Django
Verwendung von Django mit Google App Engine / Python
Starten Sie Django auf einem Docker-Container mit Docker-Compose Up
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
Für mich als Django-Anfänger (1) -Erstellen eines Projekts / einer App-
[kotlin] Erstelle eine Echtzeit-Bilderkennungs-App auf Android
Memo, als Django für VPS freigegeben wurde (Vorbereitung)
Starten Sie ein Django-Projekt
So führen Sie Django unter IIS auf einem Windows-Server aus
Für mich als Django-Anfänger (4) - Erstellen Sie eine Memo-App-
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Shogi Score Management App mit Django 4 ~ Create View ~
Ein kurzer Blick auf Ihr Profil in der Django-App
Lösung, wenn Django Projekt starten ist unter Windows nicht möglich
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Implementieren Sie die Follow-Funktion in Django
Ein Kommentar zum Boruta-Algorithmus
Erstellen Sie eine Homepage mit Django
[Django] Hinweise zur Verwendung der Django-Debug-Symbolleiste
Stellen Sie die Masonite-App auf Heroku 2020 bereit
[Django] Erstellen Sie ein Pulldown-Menü
Entwicklung der Django-Umgebung unter Windows 10