Wir werden mit der Diskussion unter der Annahme einer Mac-Umgebung fortfahren.
Überprüfen Sie die Python-Version wie folgt.
$ python3 --version
Python 3.5.2
Django shell
Dieses Mal werde ich vorstellen, wie man `` `Django Shell``` verwendet.
Beim letzten Mal habe ich die Bedienung und Überprüfung der Datenbank mit Django admin vorgestellt. Wenn Sie an Ruby on Rails gewöhnt sind, können Sie auf einer solchen Konsole `` `Rails c``` verwenden, um zu bedienen und zu überprüfen. Ich bin mir sicher, dass es Leute gibt, die das denken, aber ich denke, das ist richtig. Django hat auch eine solche Konsole, die "Django Shell" ist.
Starten Sie zuerst `` `Django Shell```.
Starten Sie Django
$ python3 manage.py shell
Python 3.5.2 (default, Jun 29 2016, 13:43:58)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
Schauen wir uns nun die Daten des definierten Modells `` `Post``` an.
>>> Post.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'Post' is not defined
Leider habe ich einen Fehler erhalten (obwohl ich keinen Fehler erhalten habe, wenn ich das gleiche Verfahren wie Ruby on Rails befolgt habe). Django scheint das Modell zuerst importieren zu müssen.
>>> from blog.models import Post
>>> Post.objects.all()
<QuerySet [<Post:Beispielartikel Titel>]>
Jetzt können Sie die Daten in der DB überprüfen.
queryset
Der Name kommt heraus, aber es scheint, dass ein Abfragesatz eine Liste von Objekten ist, die vom Modell bereitgestellt werden.
Wie Sie vielleicht in früheren Artikeln bemerkt haben, ist Django darauf zurückzuführen, dass ich Ruby on Rails als erstes Webframework gelernt habe und es zum Standard in mir geworden ist. An einigen Stellen habe ich den Eindruck, dass es schwieriger zu bedienen ist als Ruby on Rails. Das Webframework von Python ist jedoch für die Verwendung von maschinellem Lernen sehr attraktiv. Persönlich empfehle ich, mit Ruby on Rails den Grundstein für Ihre Webanwendung zu legen und Ihre Web-API mit Django zu erstellen.
Erstellen Sie einen neuen `` `Post``` in der Datenbank.
>>> Post.objects.create(author=ryosuke, title="ryosuke's article", text="Dies ist ein Artikel für Qiita")
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'ryosuke' is not defined
Du hast einen Fehler bekommen.
author=ryosuke
Ich habe einen Fehler bekommen.
author
Es erhöht sich nicht um den angegebenen Namen. .. ..
In der Tat, als ich mit Django ein Modell erstellt habe (Erklärung der Python-Webanwendung (Django) auf leicht verständliche Weise (3): Erstellen eines Modells #% E3% 83% A2% E3% 83% 87% E3% 83% AB% E3% 81% AE% E4% BD% 9C% E6% 88% 90)), `blog / models.py` Innerhalb von
blog/models.Ein Teil von py
author = models.ForeignKey('auth.User')
Dies liegt daran, dass es auf das Benutzermodell verweist. Wenn Sie dies einfach als Zeichenfolge definieren, können Sie problemlos ein Objekt für einen neuen Namen erstellen. Dies macht es jedoch schwierig, den Benutzernamen zu verwalten. Daher verwalten wir Benutzer als Benutzer und Beiträge als Beiträge, sodass Beiträge auf Benutzer verweisen.
Dieses Mal erstellen wir keinen neuen Benutzer, sondern geben dem Benutzer `ryosuke``` die Informationen von
admin``` und erstellen von dort aus ein neues Objekt.
Geben Sie Ryosuke-Administratorinformationen
>>> from django.contrib.auth.models import User
>>> User.objects.all()
<QuerySet [<User: admin>]>
>>> ryosuke = User.objects.get(username='admin')
>>> ryosuke
<User: admin>
Erstellen Sie ein neues Objekt in Post
>>> Post.objects.create(author=ryosuke, title="ryosuke's article", text="Dies ist ein Artikel für Qiita")
<Post: ryosuke's article>
Das hat funktioniert. Werfen wir einen Blick auf die Post-Objektliste.
>>> Post.objects.all()
<QuerySet [<Post:Beispielartikel Titel>, <Post: ryosuke's article>]>
Sie können sehen, dass es mehr neue `` `Post``` gibt.
Um eine bestimmte Bedingung zu extrahieren, verwenden Sie `filter ()`
für den Teil, der all ()
war, und geben Sie dem Argument die Eigenschaftsinformationen. Um beispielsweise nur Posts mit ``
author = ryosuke``` zu extrahieren, ist dies wie folgt.
>>> Post.objects.filter(author=ryosuke)
<QuerySet [<Post:Beispielartikel Titel>, <Post: ryosuke's article>]>
Im Moment unterscheidet es sich nicht von allen Objekten, aber wenn Sie mehr "Autor" haben, können Sie diese auf diese Weise nach Autor trennen.
Sie können nicht nur Bedingungen extrahieren, die genau übereinstimmen, sondern auch nach Teilübereinstimmungen suchen, die teilweise eine bestimmte Zeichenfolge enthalten.
Extrahieren Sie nur Objekte, die Artikel im Titel enthalten
>>> Post.objects.filter(title__contains='article')
<QuerySet [<Post: ryosuke's article>]>
title
Zu__contains
Durch Hinzufügen können Sie Teilübereinstimmungen gut verarbeiten (dies ist sehr praktisch).
In Python gibt es häufig zwei Unterbalken für die oben genannten. Referenz: Django Girls Tutorial: Abfrageset 1
Note Es gibt zwei Unterstriche zwischen Titel und enthält, nämlich die ORM-Syntax von Django. Der Titel des Feldnamens und die Inhalte des Sortierungstyps werden mit zwei Unterbalken verknüpft. Wenn nur ein Unterstrich vorhanden ist, wird dieser als Feldname title_contains bewertet und es tritt ein Fehler auf. ("FieldError: Schlüsselwort title_contains kann nicht aufgelöst werden")
Als nächstes ist dies auch eine häufig verwendete Funktion, aber es ist eine Methode, um nur Artikel zu extrahieren, die bereits veröffentlicht wurden. Qiita erstellt auch Artikel, kann aber als Entwurf belassen werden. Dies ist die Methode, wenn Sie nur zum aktuellen Zeitpunkt veröffentlichte Informationen extrahieren möchten.
>>> from django.utils import timezone
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post:Beispielartikel Titel>]>
Wie Sie vielleicht wissen, ist der Teil `lte``` die Bedingung für das Schreiben eines Filters, wie das`
enthalten.
lteIst
less than or equal to```Abkürzung für "veröffentlicht" in mathematischen Symbolen_date <=Es wird "aktuelle Zeit" sein.
Es ist eine Bedingung, dass es vor der aktuellen Zeit extrahiert wird oder wenn es mit der aktuellen Zeit übereinstimmt.
Für das zuvor aus der Django-Shell hinzugefügte Objekt wurde kein "veröffentlichtes Datum" festgelegt, daher gilt diese Bedingung nicht.
Da wir häufig einen Unterstrich für Variablennamen verwenden, verwenden wir zwei Unterstriche in der ORM-Syntax von Django. Wenn nur ein Unterstrich vorhanden ist, wird dieser als Variablenname behandelt, was zu einem `" FieldError: Schlüsselwort title_contains "`
Fehler kann nicht behoben werden.
Das Objekt, das Sie gerade erstellt haben, wurde noch nicht veröffentlicht (`` `veröffentlichen```). Lassen Sie es uns also veröffentlichen.
Holen Sie sich das erstellte Modell
post = Post.objects.get(id=2)
>>> post
<Post: ryosuke's article>
blog/models.veröffentlichen mit py()Da die Methode wie folgt definiert ist, ist es einfach, sie mit dieser Methode zu veröffentlichen._Sie können den Datumswert aktualisieren.
#### **`blog/models.py`**
```py
def publish(self):
self.published_date = timezone.now()
self.save()
Verwenden wir nun diese `Publish ()`
Methode.
>>> post.publish()
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post:Beispielartikel Titel>, <Post: ryosuke's article>]>
Sie haben den Artikel erfolgreich veröffentlicht.
Lassen Sie uns abschließend wissen, wie Sie die Umlagerung einfach verwenden können. Webseiten werden oft nach Menge oder Datum und Uhrzeit sortiert, daher denke ich, dass dies ein häufig verwendeter Befehl ist.
Verwenden Sie `order_by ()`
zum Sortieren.
>>> Post.objects.order_by('created_date')
<QuerySet [<Post:Beispielartikel Titel>, <Post: ryosuke's article>]>
Wenn es sich um ein Datum und eine Uhrzeit handelt, wird es grundsätzlich in chronologischer Reihenfolge angeordnet. Wenn Sie in der Reihenfolge der neu hinzugefügten sortieren möchten, können Sie diese umgekehrte Reihenfolge wie folgt angeben.
>>> Post.objects.order_by('-created_date')
<QuerySet [<Post: ryosuke's article>, <Post:Beispielartikel Titel>]>
Die Idee ist, -``` zum Argument von
`order_byhinzuzufügen.
ascOder
desc```Ist es nicht (ich denke, es unterstützt auch diesen Bereich).
Jetzt können Sie sortieren.
Manchmal starte ich die Konsole, aber zuerst weiß ich nicht, wie ich sie beenden soll.
>>> exit()
Vergessen Sie nicht dieses letzte `()`
.
Wir warten darauf, dass Sie uns folgen!
Serviceeinführung Bitte kontaktieren Sie uns, wenn Sie an "Kikagaku" interessiert sind, einem Einzelunterricht für maschinelles Lernen, mit dem Sie "Mathematik → Programmieren → Webanwendung" gleichzeitig lernen können.
Recommended Posts