Nous allons poursuivre la discussion en supposant un environnement Mac.
Vérifiez la version Python comme suit.
$ python3 --version
Python 3.5.2
Django shell
Cette fois, je vais vous présenter comment utiliser `` Django shell ''.
La dernière fois, j'ai présenté comment faire fonctionner et vérifier la base de données à l'aide de l'administrateur Django.
Si vous êtes habitué à Ruby on Rails, pourquoi ne pas utiliser des rails c '' sur une telle console pour faire fonctionner et vérifier? Je suis sûr qu'il y a des gens qui pensent cela, mais je pense que c'est vrai. Django a également une telle console, qui est
Django shell ''.
Tout d'abord, lancez `` Django shell ''.
Lancez 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)
>>>
Jetons maintenant un coup d'œil aux données du modèle défini `` Post ''.
>>> Post.objects.all()
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'Post' is not defined
Malheureusement, j'ai eu une erreur (même si je n'ai pas eu d'erreur si j'ai suivi la même procédure que Ruby on Rails). Django semble devoir d'abord importer le modèle.
>>> from blog.models import Post
>>> Post.objects.all()
<QuerySet [<Post:Exemple de titre d'article>]>
Vous pouvez maintenant vérifier les données dans la base de données.
queryset
Le nom sort, mais il semble qu'un ensemble de requêtes soit une liste d'objets fournis par le modèle.
Comme vous l'avez peut-être remarqué dans les articles précédents, Django est dû au fait que j'ai appris Ruby on Rails comme le tout premier framework Web et qu'il est devenu la norme en moi. Dans certains endroits, j'ai l'impression qu'il est plus difficile à utiliser que Ruby on Rails. Cependant, le framework Web de Python est très attractif pour l'utilisation de l'apprentissage automatique. Personnellement, je recommande de jeter les bases de votre application Web avec Ruby on Rails et de créer votre API Web avec Django.
Créez un nouveau `` Post '' dans la base de données.
>>> Post.objects.create(author=ryosuke, title="ryosuke's article", text="Ceci est un article pour Qiita")
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'ryosuke' is not defined
Vous avez une erreur.
author=ryosuke
J'ai une erreur.
author
Il n'augmente pas du nom spécifié. .. ..
En fait, quand j'ai fait un modèle avec Django (Explication de l'application Web Python (Django) de manière simple (3): Créer un modèle #% E3% 83% A2% E3% 83% 87% E3% 83% AB% E3% 81% AE% E4% BD% 9C% E6% 88% 90)), blog / models.py` Dans
blog/models.Partie de py
author = models.ForeignKey('auth.User')
En effet, il est configuré pour faire référence au modèle utilisateur. Si vous définissez simplement cela comme une chaîne de caractères, vous pouvez créer un objet pour un nouveau nom sans aucun problème. Cependant, cela rend difficile la gestion du nom de l'utilisateur, nous gérons donc les utilisateurs en tant qu'utilisateurs et les publications en tant que publications afin que les publications se réfèrent aux utilisateurs.
Cette fois, nous ne créerons pas de nouvel utilisateur, mais donnerons à l'utilisateur `` ryosuke``` les informations de
`ʻadmin``` et créerons un nouvel objet à partir de là.
Donner des informations d'administrateur à ryosuke
>>> from django.contrib.auth.models import User
>>> User.objects.all()
<QuerySet [<User: admin>]>
>>> ryosuke = User.objects.get(username='admin')
>>> ryosuke
<User: admin>
Créer un nouvel objet dans Post
>>> Post.objects.create(author=ryosuke, title="ryosuke's article", text="Ceci est un article pour Qiita")
<Post: ryosuke's article>
Cela a fonctionné. Jetons un coup d'œil à la liste d'objets Post.
>>> Post.objects.all()
<QuerySet [<Post:Exemple de titre d'article>, <Post: ryosuke's article>]>
Vous pouvez voir qu'il y a plus de nouveaux `` Post ''.
Pour extraire une condition spécifique, utilisez `filter ()`
pour la partie qui était all () `` `` et donnez les informations de propriété à l'argument. Par exemple, pour extraire uniquement les messages avec
author = ryosuke```, ce sera comme suit.
>>> Post.objects.filter(author=ryosuke)
<QuerySet [<Post:Exemple de titre d'article>, <Post: ryosuke's article>]>
Pour l'instant, ce n'est pas différent de tous les objets, mais si vous avez plus de `` auteur```, vous pouvez les séparer par auteur de cette manière.
En plus d'extraire des conditions qui correspondent exactement, vous pouvez également rechercher des correspondances partielles qui incluent en partie une chaîne de caractères spécifique.
Extraire uniquement les objets qui incluent l'article dans le titre
>>> Post.objects.filter(title__contains='article')
<QuerySet [<Post: ryosuke's article>]>
title
À__contains
En ajoutant, vous serez capable de bien gérer les correspondances partielles (c'est assez pratique).
En Python, il y a souvent deux barres inférieures pour ce qui précède. Référence: Tutoriel Django Girls: Query Set 1
Note Il y a deux traits de soulignement entre title et contains, qui est la syntaxe ORM de Django. Le titre du nom de champ et les contenus du type de classement sont concaténés avec deux barres de soulignement. S'il n'y a qu'un seul trait de soulignement, il sera jugé comme le nom de champ title_contains et une erreur se produira. ("FieldError: Impossible de résoudre le mot clé title_contains")
Ensuite, c'est aussi une fonction fréquemment utilisée, mais c'est une méthode pour extraire uniquement les articles qui ont déjà été publiés. Qiita crée également des articles, mais il peut être laissé sous forme de brouillon. C'est la méthode lorsque vous souhaitez extraire uniquement publié à ce moment.
>>> from django.utils import timezone
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post:Exemple de titre d'article>]>
Comme vous le savez peut-être, la partie lte '' est la condition pour écrire un filtre, comme le
contenir ''.
lte
Estless than or equal to
Abréviation de «publié» dans les symboles mathématiques_date <=Ce sera "l'heure actuelle".
C'est une condition qu'il soit extrait avant l'heure actuelle ou s'il correspond à l'heure actuelle.
L'objet ajouté à partir du shell Django précédemment n'avait pas défini
published_date '' ', donc cette condition ne s'applique pas.
Comme nous utilisons souvent un trait de soulignement pour les noms de variables, nous utilisons deux traits de soulignement dans la syntaxe ORM de Django. S'il n'y a qu'un seul trait de soulignement, il sera traité comme un nom de variable, ce qui entraînera une erreur
FieldError: Impossible de résoudre le mot-clé title_contains '' `` `.
L'objet que vous venez de créer n'a pas encore été publié (`` publier ''), alors publions-le.
Obtenez le modèle créé
post = Post.objects.get(id=2)
>>> post
<Post: ryosuke's article>
blog/models.publier avec py()Comme la méthode est définie comme suit, il est facile de publier en utilisant cette méthode._Vous pouvez mettre à jour la valeur de la date.
#### **`blog/models.py`**
```py
def publish(self):
self.published_date = timezone.now()
self.save()
Maintenant, utilisons cette méthode `` publish () ''.
>>> post.publish()
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post:Exemple de titre d'article>, <Post: ryosuke's article>]>
Vous avez publié l'article avec succès.
Enfin, savons comment utiliser le réarrangement facilement. Les pages Web sont souvent triées par montant ou par date et heure, donc je pense que c'est une commande fréquemment utilisée.
Utilisez ```order_by () `` `pour le tri.
>>> Post.objects.order_by('created_date')
<QuerySet [<Post:Exemple de titre d'article>, <Post: ryosuke's article>]>
Fondamentalement, s'il s'agit d'une date et d'une heure, elle sera classée par ordre chronologique. Si vous souhaitez trier dans l'ordre des nouveautés, vous pouvez spécifier cet ordre inverse comme suit.
>>> Post.objects.order_by('-created_date')
<QuerySet [<Post: ryosuke's article>, <Post:Exemple de titre d'article>]>
L'idée est d'ajouter `` -``` à l'argument de
`ʻorder_by.
ascOu
desc```N'est-ce pas (je pense qu'il prend également en charge ce domaine).
Vous pouvez maintenant trier.
Parfois, je lance la console, mais au début je ne sais pas comment la quitter.
>>> exit()
N'oubliez pas ce dernier `` () ''.
Nous vous attendons pour nous suivre!
Présentation du service N'hésitez pas à nous contacter si vous êtes intéressé par "Kikagaku", un service de tutorat individuel pour l'apprentissage automatique qui vous permet d'apprendre "mathématiques → programmation → applications Web" en une seule fois.