Django intermédiaire : développement Django, niveau intermédiaire | Kalob Taulien | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Django intermédiaire : développement Django, niveau intermédiaire

teacher avatar Kalob Taulien, Web Development Teacher

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Bienvenue dans l'intermédiaire Django (Django 201)

      2:49

    • 2.

      Créer un environnement virtuel

      4:42

    • 3.

      Commencer un nouveau projet Django

      2:38

    • 4.

      Ajouter un fichier .gitignore

      3:02

    • 5.

      Votre première application

      2:57

    • 6.

      Votre premier modèle

      3:16

    • 7.

      Enregistrer votre modèle avec l'administrateur Django

      2:39

    • 8.

      Ajouter un DateTimeField à vos publications

      2:08

    • 9.

      Comment list tous les publications sur votre page d'accueil

      7:03

    • 10.

      Configurer vos lieux

      2:49

    • 11.

      Votre premier modèle

      1:24

    • 12.

      Votre modèle de base

      2:44

    • 13.

      Blocs de modèle

      3:39

    • 14.

      Boucles de modèle

      3:57

    • 15.

      Installer Django Allauth

      9:43

    • 16.

      Liens de connexion et de connexion à la planète

      2:33

    • 17.

      Extended des modèles Allauth

      8:21

    • 18.

      Ajouter des CSS Tailwind

      6:46

    • 19.

      Des publications de style Tailwind

      5:33

    • 20.

      Ajouter une application de profil

      9:00

    • 21.

      Ajouter un paquet de vignettes

      5:46

    • 22.

      Ajouter des paramètres de médias

      4:57

    • 23.

      Ajouter des auteurs aux publications

      2:48

    • 24.

      Ajouter des données d'auteur aux modèles

      5:12

    • 25.

      Vue de détail

      4:12

    • 26.

      Modèle de détail

      4:14

    • 27.

      Inclusions des étiquettes

      5:04

    • 28.

      Publier des éléments de CreateView

      5:58

    • 29.

      Forcer l'authentication

      1:41

    • 30.

      Créer un nouveau poste

      6:03

    • 31.

      Mode de Tailwind CSS

      4:52

    • 32.

      Permettre des fichiers statiques

      5:42

    • 33.

      Ajouter du JavaScript

      3:08

    • 34.

      Vous pouvez activer le modal en utilisant JavaScript

      2:37

    • 35.

      Ajaxing de nouveaux postes

      17:07

    • 36.

      Vue de détails du profil

      5:48

    • 37.

      Modèle de détail du profil

      4:59

    • 38.

      Total des postes

      3:24

    • 39.

      Ajouter un bouton de suivi

      3:40

    • 40.

      L'application follower

      4:57

    • 41.

      Suivre et ne suivre

      17:31

    • 42.

      Suivez et ne suivez pas dynamiquement

      3:41

    • 43.

      Publies d'accueil dynamique

      7:29

    • 44.

      Votre projet

      2:37

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

267

apprenants

3

projets

À propos de ce cours

Bienvenue dans Django 201 : Intermédiaire. Le développement de Django

Dans ce cours, nous allons créer une application Web de grand réseau de grand réseau dans le réseau réseau mondial et le repot est de vous partager ce que vous avez appris dans des petites œuvres en taille.

Contrairement à Django 101 où nous avons créé un clone comme Instagram ou nous avons créé l'Instagram n'avons pas l'aspect personnel, Django 201 est d'un clone comme Twitter.

Nous commencerons au début par l'environnement virtuel, en commençant par un nouveau projet django et nous allons en créer une nouvelle application. Nous allons ensuite en les we'll à l'utilisateur par défaut. Nous allons avoir un profil où nous pouvons ajouter des détails supplémentaires et télécharger une image.

Nous abordons également l'authentication Django dans ce cours. Oui, vous pourrez laisser les utilisateurs s'inscrire, vous et vous pourrez you'll

Nous utiliserons des tags, emballages tiers, explorerons les paquets tiers et de créer de nouveaux postes à la fois.

Mais nous allons surtout mélanger JavaScript et Django afin que les gens puissent créer de manière dynamique de nouveaux postes sans quitter la page d'accueil.

J'ai eu volontairement quelques bugs dans le code pour vous l'occuper de votre projet. Il s'agit d'une expérience réelle étonnante, car de nombreuses entreprises vous donneront du code sur lequel vous pourrez travailler dans votre processus d'entrevue, et vous devrez vous servir et le poursuivre. Ce cours vous préparera.

Exigences du cours :

  • Vous devez connaître les cours Python et Python
  • Vous devez utiliser Python installé sur votre ordinateur
  • C'est le meilleur (mais non obligatoire) si vous avez suivi Django 101 avant ce cours.

Comment tirer le meilleur parti de ce cours :

  1. Code et moi
  2. Vérifiez la zone Projet pour obtenir tous les détails pour obtenir tous les codes source, étape par étape.
  3. Faites le projet et partagez vos résultats avec la classe

Rencontrez votre enseignant·e

Teacher Profile Image

Kalob Taulien

Web Development Teacher

Enseignant·e

Hi everybody! I'm Kalob Taulien.

 

Here's the TL;DR (short) version about me:

I have been coding since 1999 and teaching people how to code since 2013 I have over 350,000 web development students world-wide I'm on the Wagtail CMS core development team (Wagtail is Python's #1 most popular website making system) I try my best to answer EVERY question my students have  I love teaching — it's definitely one of my natural talents  Also I love goats! (Great conversation starter with me if we ever get to meet in person)

Below you can find all my Skillshare courses. The categories go from easiest to hardest, except for the Misc. Coding Courses at the very end. 

If you're brand new to coding, start with BEGINNERS WEB DEV.&nb... Voir le profil complet

Compétences associées

Développement Développement Web
Level: Intermediate

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Bienvenue dans l'intermédiaire Django (Django 201): Bonjour et bienvenue à Django 200 un. Dans ce cours, nous allons créer une application assez importante appelée Aujourd'hui, j'ai appris. Et dans cette application, vous allez pouvoir vous connecter, sauf les nouveaux utilisateurs, les nouvelles inscriptions. Vous serez en mesure de créer de nouveaux messages en utilisant ajax. Par exemple, bonjour monde avec un peu de cœur là-bas. Et il apparaît bonjour monde. Vous pouvez même afficher cette page comme une page détaillée, puis partager ce lien si vous le souhaitez, il y aura des comptes détaillés. Les profils utilisateur sont un autre terme pour cela. Ainsi, les profils d'utilisateur que vous pouvez suivre et annuler le suivi des personnes aussi. Et il y a un peu de devoirs entre quelques leçons là-bas. Donc vous pouvez faire beaucoup de travail que vous pouvez me suivre exactement. Mais à la fin, je vais aussi vous pousser à faire un peu par vous-même aussi. Maintenant, la bonne chose ici est qu'il va également accepter une nouvelle vue de création. Alors allons de l'avant et ouvrir dans un nouvel onglet, nouvelle vue de création, helloworld to, to, to, to, to. Et il apparaît avec bonjour à 2.2.2. Maintenant, j'ai volontairement introduit quelques bugs ici et là que je veux que vous résouliez aussi. Et cela va être une expérience pratique pour quand vous êtes un développeur professionnel et réel et que vous écrivez Django tous les deux jours. Salut, je raconte Caleb et j'écris Django depuis un certain nombre d'années maintenant. Je suis un développeur web professionnel et j'écris Django tous les jours pour vivre. J' ai travaillé avec des clients tels que la Nasa, le NHS, Mozilla, Samaritains, et beaucoup d'autres organisations là-bas, fois localement et vraiment grandes organisations aussi bien. Alors, qui utilise Django ? Les goûts d'instagram, YouTube, Pinterest discutent beaucoup de grandes et grandes entreprises utilisent Django et il est soutenu par Python, qui est vraiment, vraiment puissant. Maintenant, pour tirer le meilleur parti de ce cours, vous allez avoir besoin de connaître Python. Vous allez avoir besoin de connaître un Python assez fort. Parce que nous allons écrire des vues basées sur la classe. Et les vues basées sur les classes signifie essentiellement que nous allons écrire une programmation orientée objet. On va écrire des cours. Et donc tu vas devoir savoir comment fonctionnent les cours. Et si vous êtes un peu familier avec les cours déjà, mais vous n'êtes pas super familier. C'est tout à fait correct. Vous aurez beaucoup de pratique avec les cours dans ce cours. Nous allons aussi commencer à partir de zéro. Et je ne présume pas que tu sais quoi que ce soit. Donc, si vous n'avez jamais suivi un cours de Django, discours est toujours pour vous. Ça pourrait être un peu rapide et tu voudras peut-être aller vérifier, oh jingle, un à un. Mais ce cours serait toujours viable pour vous. Bonjour, Je suis Caleb italien et merci de vérifier mon Django 200, une classe où nous faisons une application Aujourd'hui j'ai appris et j'espère vous voir à l'intérieur. 2. Créer un environnement virtuel: Ok, bienvenue à la première leçon de Django 201A. Tout d'abord, nous devons créer un environnement virtuel. Il y a donc plusieurs façons de le faire. Mais avant tout, continuons et créons un nouveau dossier. Donc ce que je vais faire, c'est créer un nouveau fichier ici. Je vais l'appeler test.py enregistrer. Je vais aller sur mon bureau et appeler ce django 200 un. Maintenant, on dirait qu'il n'a rien fait, mais ce que je peux faire maintenant c'est ouvrir le fichier. Et je peux réellement sélectionner ce dossier entier. Et il l'ouvrira sur la gauche ici. Maintenant, nous pouvons voir test.py. Je vais aller de l'avant et supprimer ça. Je voulais juste ouvrir le dossier sur la gauche. Et ce que je peux faire maintenant, c'est aller à View et je veux ouvrir mon terminal. Non, c'était le mauvais, mais les terminaux juste là. Et il y a plusieurs façons de le faire. Alors allons de l'avant et effondrons ça. Et je vais faire une touche plus grande. Zoom avant, dans tout le chemin. Et donc nous pouvons vraiment faire n'importe quoi en termes d'environnements virtuels. Nous pouvons utiliser un complément PIP, que je vais utiliser dans ce module particulier dans Django à un. Ou nous pouvons utiliser Python Dash m, alors nous pouvons utiliser un V régulier et V a. Ensuite, nous pourrions utiliser Docker si nous le voulions ou envelopper env vagabond ou virtuel. Ce que je vais faire est simplement, simplement utiliser pip pour commencer. Donc si vous n'avez pas Pip, Pip, montrez Pip env. Et vous devriez déjà avoir PIP et tout parce que vous êtes un développeur Python et vous connaissez déjà un peu de django de base. Donc, vous devriez avoir PIP. Maintenant, j'ai pip 20, f.11 dot 15 installé. Peu importe la version que vous avez tant que c'est une version plus à jour. Si vous ne voyez pas ça, si ça ressemble à quelque chose comme ça, cela dira disparu, vous êtes réellement infecté, ne dira rien. Donc, si vous ne voyez rien, ce que vous devez faire est pip install Pip env. Et cela dit déjà pour moi que l'exigence a été satisfaite. Donc maintenant je peux aller de l'avant et je vais effacer ce type de pip installer Django. Et ça va aller de l'avant et créer un nouvel environnement branché pour moi. Et il va installer Django, comme on peut le voir en bas à gauche, il dit installer Django et c'est peu de chose de chargement et de verrouillage. Et maintenant, pour entrer dans un environnement virtuel, nous pouvons faire Pip env shell. Et maintenant, vous pouvez voir que nous sommes à l'intérieur de notre environnement Pip. On peut faire pip show Django, et ça va nous montrer son site Django. Maintenant, cela ne fait que créer un environnement virtuel. On ne va pas installer Django tout de suite. On va le faire dans la prochaine vidéo. Maintenant, pour sortir de votre contrôle C ou Control D devrait simplement vous sortir de là. Sinon, si vous le souhaitez, vous pouvez toujours faire Python Dash m Dot VN. Et c'est une autre façon. Ouais, regarde ça. Vs Code est assez intelligent pour réaliser ce qui se passait là-bas. Ensuite, nous pouvons faire et pas Python, mais nous voulons faire le point source v1, c'est le nom du dossier. Et puis activer et ça nous amène à l'intérieur d'ici. Et puis nous pouvons faire pip show Django par exemple. Maintenant, je ne vais pas utiliser un venn, je vais utiliser Pippen, mais vous pouvez utiliser celui que vous voulez. Ou encore, vous pouvez utiliser Docker ou tout autre système que vous préférez vraiment. Donc je vais juste désactiver pour sortir d'ici. Pip, Pip va me ramener et juste pour prouver que j'ai une vraie cellule qui peut faire pip, montre Django. Et ça n'a pas fonctionné. Je pense que Yahya, on a fait quelque chose de drôle ici. Nous en avons besoin parce que j'ai deux environnements virtuels ici et ils sont contradictoires. Je suis vraiment content que cela soit arrivé, c'est que je veux dire, je vais devoir supprimer l'un d'eux. Donc ce que je vais faire, c'est RM Dash R, point F. Et puis pour revenir et nous faisons juste une coquille préventive. Maintenant, si vous rencontrez une chose qui dit quelque chose dans le sens de c'est déjà activé. Et tu ne peux pas y entrer. Nous pouvons faire, c'est que vous pouvez simplement fermer votre terminal et rouvrir un nouveau terminal. Et puis tu pourras faire une coquille préventive et ça te ramènera là-dedans. Parfois, le code VS fait cette petite chose bizarre où il pense qu'il est toujours à l'intérieur d'un environnement virtuel, mais ce n'est pas le cas. Donc c'est juste la façon de contourner ça. Assurez-vous donc que vous avez un environnement virtuel installé. Dans la leçon suivante, nous allons aller de l'avant et lancer un tout nouveau projet Django. 3. Commencer un nouveau projet Django: Bon, allons-y et commençons un projet Django. Donc si je vous montre les fichiers que j'ai à gauche ici, il n'y a pas beaucoup ici. J' ai un fichier Pip et un fichier Pip, dot loc. Tout d'abord, allons de l'avant et entrons dans notre environnement Pip. Peu importe le type d'environnement que vous utilisez, vous avez juste besoin d'être à l'intérieur de celui-ci. J' utilise Pippin juste parce que c'est gentil et facile. Et ici, nous voulons faire Pip montrer Django. Maintenant, si vous n'avez pas Django, vous pouvez toujours faire pip installer Django et cela va simplement installer Django pour vous. Je ne vais pas diriger ça parce que je l'ai déjà. Non, grattez ça. Je vais te montrer à quoi ça ressemble. Ça ne fait rien parce que je l'ai déjà. Donc parce que nous avons Jenga, ce que nous pouvons faire est Django Dash admin, démarrer le projet. Et ça va être TIL envoie pour aujourd'hui, j'ai appris TIL. Maintenant, vous pouvez voir qu'il a créé un dossier pour nous ici appelé TIL. Il a été géré haut et tout ça dedans. En fait, ce que je veux faire, c'est que je veux jeter ça dans ce même dossier que je suis déjà avec mon fichier Pip et Pip fichier dot loc. Et donc ce que je vais faire, c'est la même commande, Django, dash admin, démarrer l'espace du projet TIL et puis juste frapper un point. Et cela va installer un projet directement dans mon dossier ici. Donc, il ne va pas créer un dossier appelé TIL, il va créer un projet appelé TIL à l'intérieur de mon dossier actuel. Donc, gérons dot pi est à côté de mon fichier Pip et compilé dot loc. Juste comme ça parce que c'est un de moins. Quel est le mot que je cherche ? Répertoires un répertoire donc, c'est un dossier de moins à traiter. Maintenant, à ce stade, nous pouvons aller de l'avant et nous pouvons exécuter notre application. On peut faire toutes sortes de choses à l'intérieur de Django. Ainsi, par exemple, nous pouvons écrire Python géré up.py exécuter serveur 0.0.0 point 0 deux-points 8 mille. Et cela va me dire que nous avons une migration appliquée maintenant vous devriez être un peu familier avec Django déjà. Dans ce cas, vous devriez pouvoir exécuter vos migrations. Vous faites simplement Python gérer dot py migrer, et cela va exécuter vos migrations. Cela fournit simplement ce fichier db.json pour nous. Et puis nous pourrons relancer notre serveur. On ne voit plus cette erreur. Et allons-y et ouvrons localhost deux-points 8 mille dans n'importe quel navigateur que vous voulez. Et vous devriez voir cette page. Une fois que vous avez cette page, vous êtes opérationnel avec Django, Simple comme ça. Dans la leçon suivante, continuons et ajoutons un peu Git ignorer, ignorer des choses de sorte que si vous utilisez Git et que vous devriez probablement utiliser Git et GitHub, GitLab ou Bitbucket ou une sorte de contrôle de gestion de versions que nous n'avons pas commettre accidentellement des fichiers comme notre db.json mettre en évidence trois fichiers. 4. Ajouter un fichier .gitignore: Ok, donc si vous utilisez Git, nous pouvons faire un état git ici et nous pouvons voir que nous avons ce fichier db.json en retard trois. Maintenant, si vous venez de commencer à utiliser Git, vous allez vouloir utiliser git init. Et cela va juste créer un dépôt Git à l'intérieur de, eh bien, pas vraiment un dépôt complet, mais il va activer entrer dans votre projet pour vous. Et au lieu de ce que vous voyez ici et obtenir le statut de juste db.json H3. Vous allez voir tous les fichiers ici, y compris votre db.json H3. Et ce que nous voulons faire, c'est que nous voulons ignorer ce fichier et un tas d'autres fichiers aussi bien. Donc, ce que nous allons faire est ici, nous allons créer un nouveau fichier appelé un point à GIT IG et ORE dot git ignorer. Et si je glisse un peu ça, je veux dire ne colle pas un tas de trucs ici. Et vous pouvez obtenir cela directement à partir du code source est alors qu'il y a trop de lignes à parcourir et couvre vraiment beaucoup de scénarios différents. Python crée souvent un répertoire appelé cache pi. Par exemple. Nous ne voulons pas avoir comme disque, Var Wheels, toutes sortes de choses ici. C' est juste des paramètres HTML et Python standard et toutes sortes de choses, mais nous pouvons voir Django farce ici. Voici un peu plus applicable à ce que nous écrivons. DB.json x3 et db.json journal à trois tirets. Cela va s'assurer que ces fichiers ne sont pas accidentellement ajoutés à un référentiel. Et donc si j'ai encore foiré, sauvegardons ce gitignore et je peux faire un statut git. Nous allons voir que Gitignore n'est pas là, mais db.json a3 n'est pas là dedans. Et c'est exactement ce que nous voulons. Dans le futur, nous allons ignorer toutes sortes de choses. Mais pour l'instant, nous voulons juste ignorer les choses les plus courantes comme les évents. Nous n'avons absolument pas pour quelque raison que ce soit, voulons valider notre environnement virtuel entier, un fichier Pip et IPIP file.js. Ok, c'est très bien. Il n'y a pas beaucoup de contenu ici. Et ça va être tout à fait bien. Mais si vous deviez utiliser un environnement virtuel, un v et un v, alors vous auriez un dossier entier avec beaucoup de fichiers là-dedans que vous pourriez accidentellement commettre. Et cela signifie juste que quelqu'un est assez pour télécharger beaucoup plus, beaucoup plus de contenu de GitHub plus tard. Et c'est juste une douleur dans les fesses. Et ils vont rencontrer les problèmes de gestion des versions et c'est juste, c'est difficile. Donc, au lieu de cela, nous sommes ignorés. Et l'une des choses que nous voulons être ignorés, et vous pouvez voir que c'est en fait grisé maintenant est mon db.json a3. Et c'est juste parce que lorsque je crée un utilisateur, il va y avoir mon mot de passe. Il va être crypté, mais il va quand même avoir mon mot de passe crypté là-dedans et ce n'est pas bon. Nous ne voulons pas que nous ne voulons pas mettre ça nulle part. Nous voulons garder ça sur votre ordinateur, gardez-le bien et en sécurité. De la neige. Vous pouvez aller de l'avant et faire git, ajouter dot git ignore. Et puis vous pouvez faire git commit puis votre message. Et je vais commettre ça. Et dans la leçon suivante, nous allons aller de l'avant avec mise en place de notre première application à l'intérieur de Django. 5. Votre première application: D' accord, allons-y et commençons notre première application. Donc, si nous faisons cela, nous faisons Pip nth, devrions-nous entrer dans notre environnement virtuel, nous exécutons Python géré haut serveur, 0.0.0 que j'ai manqué un point 0 deux-points 8 mille de toute façon, cela va nous permettre, si nous ouvrons mon navigateur ici, Firefox, vous pouvez voir que nos sites sont en cours d'exécution. Et si nous allons à Slash Admin, nous devrions pouvoir nous connecter. Nous n'avons pas encore de journalisation, alors continuons et créons un login. Retournons à notre terminal. Et ce que je vais faire, c'est que je vais ouvrir une scission ici. Donc, je vais avoir jangle courir sur la gauche et je vais écrire et exécuter quelques commandes sur la droite. Donc je peux faire pip shell pour revenir à l'intérieur d'ici. Et je peux faire Python gérer dot py, créer un super utilisateur. Et ce que cela va faire, c'est me demander un nom d'utilisateur. Je vais dire que mon nom d'utilisateur est Caleb kilo-octet. Caleb point IO. Le mot de passe sera quel que soit mon mot de passe. Et c'est exactement pourquoi nous ne commettons pas nos fichiers SQ lite est parce que je viens de taper un mot de passe là-dedans. Je ne veux pas que quelqu'un puisse essayer de casser ce mot de passe. Que ce soit un bon mot de passe ou non, peu importe. Je ne veux pas que quelqu'un connaisse ce mot de passe. Alors revenons ici. Et j'ai créé un utilisateur appelé Caleb avec un mot de passe de Guam et je vais le dire. Et ça m'amène à mon administrateur Django. Et maintenant, nous pouvons gérer les groupes et les utilisateurs, aller dans les utilisateurs. Et je peux me débrouiller moi-même. Je suis le seul utilisateur là-dedans. Ok, donc nous avons maintenant un Django Admin créé, un super utilisateur créé. Allons de l'avant et créons notre première application. Donc, pour créer notre première application, ce que nous devons faire est peut-être que je peux juste, ouais, faisons-le plus un peu. Python géré dot py, démarrer l'application, pas démarrer le projet, c'est démarrer l'application. Et puis nous allons appeler ce flux d'application. Si nous faisons un état git ici, nous pouvons voir que nous avons un nouveau dossier appelé Feed. Nous avons un nouveau dossier ici appelé flux, et il a toutes sortes de choses dedans. Allons-y et ouvrons. Aujourd'hui, j'ai appris et nos paramètres et paramètres internes, nous devrions voir les applications installées ici. Applications installées et juste en dessous des trucs Django, nous voulons juste taper flux. Et cela correspond simplement au nom du dossier ici. Et en fait, si nous allons dans les applications, nous pouvons voir les apps point pi à l'intérieur de notre flux. La configuration du flux ou l'APP_CONFIG. Son nom est appelé flux, et c'est pourquoi nous l'appelons flux à l'intérieur des applications installées. Maintenant, avec ces fichiers KMZ tels que vos vues, modèles de test, applications, admin init, migrations avec un fichier init vide à l'intérieur de celui-ci. C' est une application Django standard. À ce stade, vous devriez toujours être assez familier avec cela. Je vais aller de l'avant et commettre ceci et ensuite nous allons passer à la leçon suivante où nous créons notre premier modèle appelé post. 6. Votre premier modèle: Bon, bienvenue. Donc ici, j'ai beaucoup de choses sur l'écran. J' ai tous mes dossiers sur la gauche. J' ai mon montage en haut, en haut à droite, au milieu en bas, nous avons Django en cours d'exécution. Et en bas à droite est l'endroit où je vais exécuter un tas de commandes et à tout moment, je peux simplement déplacer cela. Et si tu te connectes maintenant et que tu es genre, oh , hé, comment t'as eu ça ? Tout ce que j'ai à faire, c'est de cliquer sur cette petite icône divisée ici, par ici. Donc, dans cette leçon, ce que je veux faire, c'est que je voulais ouvrir des modèles dot py, et que je veux créer un tout nouveau modèle. Maintenant, ce modèle va être assez nu pour commencer, et nous allons y ajouter un peu plus tard. Donc, faisons des modèles de classe Post, modèle point, et cela va créer un nouveau modèle, une nouvelle ne sont pas une base de données mais une nouvelle table à l'intérieur de notre base de données. Et nous voulons lui donner un texte est égal aux modèles dot, pas TextField, champ char. Et parce qu'aujourd'hui, j'ai appris dans cette application va être beaucoup comme Twitter, où vous pouvez vraiment seulement poster un certain nombre de caractères. Donc, disons que vous ne pouvez poster que quelque chose comme 240 caractères. Maxlength est égal à 240. Et l'idée est que vous publiez simplement ce que vous apprenez aujourd'hui et que tout le monde peut suivre et voir ce que vous apprenez aujourd'hui et vous pouvez dire au reste du monde, mais ce que vous apprenez, toutes sortes de choses comme ça. Alors allons de l'avant et créons un nouveau fait, laissons ça une seconde. Je veux vous montrer comment ça marche. Nous avons donc ce nouveau modèle de poste. Allons-y et tapons. Tout d'abord, allons-y. C' est un peu plus visible là-bas. Python géré dot pi et je suis dans mon environnement virtuel en ce moment. Effectuez des migrations. Et ce que cela va faire est de créer un nouveau fichier de migration appelé initial. Et ce que cela va faire, c'est qu'il n'a pas de dépendances. Et cela va simplement dire, hey Django, lorsque vous exécutez ce fichier en Python, crée un nouveau modèle appelé post, et il a des champs id et texte dessus. Donc, chaque publication a un ID par défaut, même si nous ne l'avons pas spécifié. Et nous avons dit des modèles de texte char longueur de champ de 240. Modèle texte longueur de champ char 240. Maintenant, c'est cool. Ça vient de faire le fichier qui n'a rien fait. Allons de l'avant et tapez Python managé dot py migrate. Et ce que ça va faire, c'est exécuter ce fichier pour nous. Et vous pouvez voir qu'il dit appliquer le flux 001 soulignement initial, tout allait bien. Maintenant un peu plus tard, quand nous regardons ces messages dans notre administrateur, nous allons voir que cela apparaît comme un nom drôle. Et quand nous arriverons à ce point, nous allons changer à quoi ce nom ressemble réellement. Mais pour l'instant, j'ai dit qu'on allait s'attaquer à ça maintenant. Nous devons nous attaquer à cela à l'avenir quand nous y arriverons. Nous allons donc aborder les choses un par un au fur et à mesure que des problèmes surgissent. Et ça ressemble beaucoup à la façon dont nous codons dans la vraie vie. C' est tout ce que nous avons à faire pour cette leçon particulière. Tout ce que nous devions faire était de créer un nouveau modèle appelé post. Donnez-lui un champ appelé textes où la longueur maximale de 240. Et puis nous, Python a réussi à faire des migrations élevées. Python a géré une migration élevée. Et nous sommes prêts à y aller. 7. Enregistrer votre modèle avec l'administrateur Django: Très bien, disons que nous voulons être en mesure de gérer les messages via notre administrateur Django. Donc, nous allons dans notre Django Admin et nous ne voyons pas de messages là-dedans et nous devons maintenant l'enregistrer. Donc, ce que nous pouvons faire est dans notre flux, dans notre admin dot py et il doit aller dans ce fichier. C' est là que Django cherche. Il est tout d'abord, nous allons dire de DOT modèles import post. Et nous disons des modèles de points, point étant ce dossier particulier, modèles étant le module ou le fichier. Alors fermons ça. Admin dot py disant ce dossier particulier ici, puis chercher des modèles haut ici, importer, poster. Et puis nous pouvons enregistrer le modèle ici. Et s'inscrire est vraiment facile. Nous allons utiliser une simple forme d'inscription. Donc, nous allons faire la classe post admin, admin, dot model, admin, admin, si je peux épeler ce droit. Et nous n'allons pas y ajouter de paramètres. Pas encore de toute façon, si vous le vouliez, vous pouvez certainement aller jeter un oeil aux documents Django et ajouter vos propres paramètres. Mais pour l'instant, nous voulons juste que tout soit accessible et il n'y a qu'un seul champ sur ce modèle de post particulier de toute façon. Donc, ce n'est pas comme si nous pouvions vraiment faire trop. Donc maintenant, nous devons dire Admin Register site et nous devons connecter ces deux. Nous devons connecter post avec post admin, et cela va connecter notre post. Voici le modèle Models.swift avec nos messages Admin, qui utilise admin, dot Modèle admin. Alors allons-y et sauvegardons ça. Et rafraîchissons ici. Et là, nous voyons des flux et des messages, et nous n'avons pas encore de posts là-dedans. Allons de l'avant et créons notre premier post. Notre premier post, économisez. Et il est dit post l'objet un. C' est la chose bizarre dont je parlais dans la dernière leçon. Allons de l'avant et changeons vraiment ça. Et c'est vraiment facile à faire. Tout ce que nous avons à faire est d'ouvrir notre model.predict. Et à l'intérieur de notre classe de poste ici rappelez-vous que l'indentation est importante. Sourds TR, moi, c'est deux traits de soulignement côte à côte. Donc, underscore, underscore, STR, underscore, underscore auto parce que chaque, chaque méthode sur une classe Python prend toujours elle-même comme son premier paramètre par défaut. Ensuite, nous pouvons dire retourner le texte de point auto. Et tronquons ça pour être comme les 100 premiers caractères. Et attendez juste que Django se recharge. Et on y va. Ça dit notre premier post. Et faisons cela édité. Sauvez-le. Et il est écrit édité. On y va. Nous avons maintenant enregistré notre modèle de poste auprès de l'administrateur Django. 8. Ajouter un DateTimeField à vos publications: Bon, bienvenue. Nous avons un post et nous avons du texte dedans. Nous ne savons pas qui a écrit ce post, nous l'ajouterons plus tard. Et nous ne savons pas à quelle heure le post a été créé. Alors allons-y et tout d'abord, ajoutez la date. Ajouter les données va être beaucoup plus simple. Donc, ce que nous voulons faire ici, c'est juste ouvrir le code Visual Studio. Et dans nos modèles dot py fichier, où notre poste est notre classe de poste, nous voulons dire que la date est égale aux modèles dot datetime champ, pas un champ de date. Un champ de date sera juste le jour. Un champ datetime sera la date, l'année, le mois, le jour, plus l'heure, minutes secondes. Et ici, nous voulons dire que Auto maintenant est égal à vrai. Donc, chaque fois que nous créons un nouveau poste, il suffit de dire que ce post a été créé à ce moment particulier. Donc on n'a rien à faire. Django va gérer ça pour nous. Nous n'avons pas à nous soucier de la mettre à jour, de l'insérer ou de faire tout type de travail de base de données. Django s'en occupe comme par magie pour nous. Maintenant, tout est sympa. Et il y aurait une belle si tout ce que nous avions à faire était de rafraîchir notre page. Mais si vous actualisez votre page et que vous voyez quelque chose comme aucune colonne, cela signifie simplement que vous devez changer certaines choses dans votre base de données. Et pour ce faire, nous faisons des migrations. Donc Python a géré haut, faire des migrations. Et Python géré dot py migrer. Et revenons à notre code ici. Pas notre code, mais notre navigateur et ça marche. Et notre champ de date n'apparaît pas. Et notre champ de date n'est pas censé apparaître. Notre champ de date n'est pas censé être modifiable. Auto le rend désormais non modifiable par défaut. Et c'est bon. On ne veut pas s'embêter avec les dates. Nous ne voulons pas être en mesure de modifier les dates du tout. Nous, dès que nous créons un poste, nous voulons que cette date lui soit automatiquement remplie. Et c'est ainsi que nous ajoutons un nouveau champ à ce modèle de publication ou à n'importe quel modèle vraiment, vous ajoutez un nouveau champ. Quelque chose est égal à des modèles point une sorte de champ. Et puis vous faites Python géré haut faire des migrations. Python gère la migration de tarte. 9. Comment list tous les publications sur votre page d'accueil: D' accord, allons de l'avant et créons une page d'accueil. Parce que si on retourne à notre page et qu'on sort de l'administrateur. Nous voyons juste Django a la page d'accueil par défaut. Maintenant, cela nécessite en fait quelques étapes différentes, mais pour commencer, créons notre point de vue et sorte de l'idée avec Django est beaucoup de choses à faire en même temps. Et le problème avec regarder une vidéo comme celle-ci , c'est que nous devons faire des choses une à la fois, donc cela n'a pas toujours de sens. Mais les prochaines étapes, nous allons simplement faire tout cela dans un ordre particulier et c'est la fin qui est importante. Tant que nous avons des choses comme des URL, des vues et un modèle, tout devrait fonctionner pour nous. Mais nous ne pouvons pas vraiment tout faire fonctionner sans les trois composants. Donc, ce que nous allons faire ici, c'est que nous allons ouvrir notre flux et entrer dans notre point de vue. Et je vais juste me débarrasser de ce rendu parce que nous n'allons pas utiliser une vue basée sur la fonction, nous allons utiliser une vue basée sur la classe. Et donc nous allons dire à partir de Django dot, point générique import ListView. Et nous voulions aussi, à partir de modèles DOT importer notre poste. Et parce que nous travaillons avec le poste, nous voulons généralement l'importer. Maintenant, allons de l'avant et créer une page d'accueil de classe page d'accueil. Et ce sera notre ListView. Et ce que cela va faire est simplement de rendre un modèle avec tous ses messages dedans. Donc, disons que les noms de méthode HTTP vont être Get. Cela signifie que les gens ne peuvent pas poster, ils ne peuvent pas supprimer le ne peut rien faire comme ça. Tout ce qu'ils peuvent faire est d'obtenir une demande de page et de voir les messages. C' est tout ce que fait la page d'accueil. Le nom du modèle va être, appelons-le point HTML de la page d'accueil. Le modèle que nous voulons lister est post. Notre nom d'objet de contexte est généralement je crois que c'est l'objet par défaut, mais je l'écrase toujours pour être des messages. Et c'est ce que nous allons utiliser dans notre modèle, que nous allons probablement aborder dans la prochaine vidéo pour être honnête. Et puis le site de requête va simplement être post.All objets dot all. Et nous voulons commander ces messages par l'Id Descending. Et nous allons nous assurer que nous n'obtenons que 30 messages à la fois. Donc, une page ne charge pas un million de messages parce que cela pourrait prendre une éternité pour charger B vraiment blesser votre base de données. Donc c'est tout ce que nous allons faire dans nos vues en haut. n'y a rien d'autre ici, comme vous pouvez le voir. Ensuite, nous devons créer un nouveau fichier ici dans notre domaine. Appelons ceci URL dot py, URL dot py. Et ici, nous allons créer une nouvelle série d'URL. Donc, c'est fait à partir de Django, URL de point, chemin d'importation, et à partir de vues d'importation de points. Il nous a également donné un nom d'application et je vais le décrire en seulement une seconde. Parce qu'il semble que je vais assez vite ici, mais c'est à peu près des trucs de Django 101 jusqu'à présent de toute façon, vous devriez être assez familier avec cela. Les modèles d'URL sont égaux à, et puis il y a un chemin, un endroit où il va. Points de vues. Quelle était cette vue, si nous l'appelons et juste point de page d'accueil comme vue. Le nom va être noté et ce n'est pas juste. Le nom est égal à l'index. Donc, dans ce fichier, tout ce que nous faisons, c'est que nous importons le chemin afin que nous puissions l'utiliser ici. Nous importons tous nos points de vue. Nous n'avons vraiment qu'une seule vue. Nous pourrions importer seulement la vue unique si nous le voulions, mais nous allons importer dans l'ensemble du module views afin que nous puissions utiliser la vue en tant que page d'accueil point, puis rendre ce modèle en tant que vue, qui va ensuite se connecter à notre modèle nom, juste le point de la page d'accueil HTML. Et notre nom d'application, qui est ce que nous allons utiliser pour l'espacement des noms est le flux, et qui correspond juste au nom de l'application que nous utilisons dans son nom de dossier. Il correspond aussi à celui-ci ici. Et que juste une sorte de garde l'espacement des noms ou des URL et agréable et facile, nous allons parler des espaces de noms et pourquoi c'est plus important. Et quand nous arrivons plus ou moins au côté du modèle des choses, enfin, nous devons ouvrir les URL TIL slash dot py. Et ici, on voit tout ce qu'on a c'est notre administrateur. Donc, si nous le voulions, nous pourrions complètement désactiver l'administrateur en le supprimant simplement. Et l'administrateur ne serait plus accessible à aucun utilisateur quel qu'il soit. Mais ce n'est pas ce que nous voulons. Ce que nous voulons, ce que nous voulons, c'est que nous voulons un chemin qui va à notre page d'accueil. Et nous voulons faire ce qu'on appelle inclure. Et nous voulons inclure comme nos URL de flux ou quelque chose comme ça. Nous n'avons pas encore importé cela et nous voulons nous donner un espace de noms de flux. Et encore une fois, nous allons parler d'espaces de noms et un peu. Donc, tout d'abord, nous devons inclure et bien, ce n'est pas mal. Nous devons importer inclure et nous devons importer des URL de flux. Donc, nous allons faire à partir des URL de points Django.com, importer inclure. Et si jamais tu te demandes, hey, Caleb était sur terre, est-ce que tu as ça ? Comment mémorisez-vous tout ça ? Tout d'abord, je n'ai pas beaucoup de ces mémorisés. Je les écris assez pour en connaître certains et être ceux que je ne connais pas. Honnêtement, je regarde juste les docks de Django. Les docks Django me diront tout ce que j'ai besoin de savoir. Donc je manque et je déplace ça d'une ligne. Et nous allons faire à partir des URL d'importation de l'application pieds, le fichier entier comme URL de flux. Et ça correspond juste ici, donc je viens de renommer cette importation. Allons de l'avant et sauvegardons ceci et voyons ce qui se passe. Aucun module nommé Django, conf dot URL, je pense que c'est censé l'être. Où sommes-nous ? Des urls ? Voir, je reçois les choses mal à aucun module nommé Django dot URL, quel fichier ou vous alimenter URL. On va juste s'attaquer à ces URL de point Fi. Django, URL. Django va continuer à me dire qu'il y a un problème ici. C' est probablement un que tu as attrapé. Jeu de requêtes moins non, ce n'est pas correct. L' ensemble de requêtes est égal à et la boisson allait juste continuer me dire qu'il y a des problèmes jusqu'à ce qu'il n'y ait plus de problème. Alors allons-y et revenons à notre page et rafraîchissons. Et nous devrions, si tout fonctionne correctement, voir ce modèle n'existe pas. Il est à la recherche de la page d'accueil, il est à la recherche de la liste de messages slash de flux et est à la recherche de Django contra off templates page d'accueil, Django contract admin templates feed, Django Admin templates feed, Le flux de modèles de contrat Django recherche ces fichiers et ces dossiers. Il ne sait pas où chercher. Donc, dans la leçon suivante, allons de l'avant et dire à Django en modifiant certains de nos paramètres, qu'il devrait regarder dans un dossier particulier pour nous. 10. Configurer vos lieux: Ok, dans la dernière leçon, Django n'a pas pu trouver notre point HTML de la page d'accueil, probablement parce que, nous n'avons pas créé ce fichier, donc il ne peut le trouver nulle part, ce qui est juste. Et B, il regarde dans des endroits bizarres. Et donc Django nous laisse mettre en place seul pour que nous puissions le mettre en place seuls pour que nous puissions en faire ce que nous voulons. Nous avons beaucoup plus de flexibilité de cette façon. Donc ce que je veux faire, c'est que je veux ouvrir ce fichier appelé Settings dot py. Et où est mon répertoire de base, base, base, répertoire de base. Donc, nous devons faire quelques choses différentes ici. Tout d'abord, nous voulons un répertoire de projet, alors faisons le projet désastreux. Et ça va être une chose bizarre dont vous n'avez probablement pas besoin de vous souvenir parce que vous n'allez pas écrire ça trop souvent. Vous pouvez juste obtenir cela correctement pour mon code source si vous voulez. Donc, nous allons faire OS dot path dot dy ou nom OS dot path dot dire nom OS dot path dot dot chemin chemin chemin chemin absolu, underscore, underscore, et puis ce fichier particulier. Faisons en sorte que je n'ai pas de fautes de frappe là-dedans. Ça devrait apparaître deux fois. Et ce n'est pas parce que c'est un nom terrible comme Dire Wolf. Et on y va. Maintenant, nous utilisons OS. Nous devons aller de l'avant et importer cela. Donc, nous allons importer OS en haut, c'est juste en dessous de toutes mes chaînes de doc ici qui vient par défaut avec Django. Donc ça va marcher pour moi. Si j'appuie sur save, il ne devrait pas y avoir de plaintes dans la console Django là-bas. Ensuite, nous devons trouver nos modèles, modèles, modèles, modèles et regarder ces modèles. Et puis nous avons cette option ici appelée journaux, ces répertoires. Et ce que nous voulons faire ici, c'est dire que le point de chemin d'accès du système d'exploitation rejoigne ce répertoire de projet, qui sera exactement là où vit tout ce projet. Jusqu' à ce que ce soit ce dossier particulier ici, slash templates. Et ça va être à la recherche d'un sous-dossier ici appelé Templates. Maintenant, allons de l'avant et ouvrons notre navigateur et voyons où Django cherchait. Maintenant. Jenga cherchait des modèles de bureau Django 2-1 TIL, page d'accueil point HTML. Allons de l'avant et comme faire en sorte que cela existe très rapidement. On ne va pas faire beaucoup de travail avec ça. Faisons en sorte qu'il existe. Donc, nous allons créer un nouveau dossier appelé templates et le nouveau fichier appelé homepage dot HTML, trucs ici. Mais littéralement tout ce que je vais écrire. Un grand succès qui fonctionne pour nous. Et donc, dans cette leçon, nous avons réussi à mettre en place notre système de modèles. Dans la leçon suivante, allons de l'avant et travaillons réellement avec le modèle un peu plus. 11. Votre premier modèle: Oh, c'est vrai. Dans la dernière leçon, nous avons fait notre premier modèle page d'accueil point HTML. Nous mettons des choses là-dedans, ce qui est génial, et nous les mettons dans le dossier TIL Templates. Ce que nous pourrions faire en fait, c'est des vues intérieures. On pourrait changer où on veut trouver ça. Nous pourrions aller nourrir slash page d'accueil point HTML. Et ce que cela va nous permettre de faire est de sortir ceci de notre dossier de modèles génériques standard, qui était nécessaire et sera nécessaire à l'avenir. Mais on va rebouger ça. Alors faisons un nouveau fichier dans notre application de flux cette fois, appelons-le des modèles. Ce sera un nom de répertoire. Nous allons lui donner l'espace de noms de flux, le point de page HTML. Plus de trucs ici aussi, à, à, à. Et voyons où Django cherchait d'abord ce modèle. Plus de choses ici aussi à 2.2.2, malgré qu'il y ait effectivement deux pages d'accueil. Donc, ce que nous pouvons faire, c'est nous pouvons aller de l'avant et nous débarrasser de cette page d'accueil. Et c'est là que va vivre notre page d'accueil. Et c'est tout ce qu'on va faire pour cette leçon. Nous voulions simplement déplacer notre modèle vers l'application de flux, puis juste quelque sorte le garder agréable et propre afin que le flux entier soit un peu autonome. 12. Votre modèle de base: D' accord, à ce stade, on a une page d'accueil et on doit y ajouter un tas de trucs. Et donc dans VS Code, nous pouvons faire HTML5 deux-points note HTML deux-points cinq, cloué. Et ça va remplir un tas de trucs pour nous. Notre page ici, page d'accueil. Et quand on rafraîchit la page, ça dit notre page ici et la page d'accueil. Et dans notre source, moins de page source. Nous pouvons voir tout ce HTML. Zoomez là-dedans. C' est exactement ce qu'on a écrit. Maintenant, c'est bon. Jusqu' à ce que nous ayons besoin d'un deuxième modèle dont nous allons avoir besoin sur la route. Et donc à ce stade, ce que nous voulons faire, c'est que nous voulons utiliser ceci, tout ce code comme un modèle de citation sans citation. Et vraiment juste changé seulement les petites pièces dont nous avons besoin, comme notre titre ou tout simplement le contenu de notre page d'accueil. Donc, ce que nous allons faire est dans notre dossier t UP TIL Templates, créer un nouveau fichier appelé base HTML point. Et faisons HTML deux-points cinq, fichier de base, et appelons-le fichier de base ici. Maintenant, encore une fois, cela ne va rien faire même si nous avons le dossier. Django ne sait pas quoi en faire. C' est juste une sorte de traîner dehors. Ne pas être utilisé n'est pas appelé par d'autres modèles ou des vues ou quelque chose du genre. Au lieu de cela, ce que nous pouvons faire est dans notre page d'accueil, nous pourrions dire étend le point de base HTML. Et si nous actualisons ce fichier de base dit ici. Ceci prolonge notre page d'accueil. Supprimons donc cette première deuxième page de mise à jour. Nous voyons rien ne s'affiche comme source de la page Viewer. Il n'y a rien là-dedans. Annuler cela, enregistrer, actualiser le fichier de base ici il dit fichier de base et le titre ainsi. C' est exactement ce que nous avons changé cette source de page de visionneuse, et nous utilisons maintenant deux fichiers de modèle en même temps. Et donc ce que cela fait est de dire, hey, Django, prenez ce fichier HTML point de base que vous utilisez actuellement et utilisez-le. Et donc je veux que vous preniez toutes ces choses là-dedans et je veux que vous vous en étendiez. Cela nous permet d'injecter éventuellement de petits morceaux de code dans cette page. Donc, sur chaque page, nous n'avons pas besoin d'écrire du HTML. Lang est égal à l'anglais. On n'a pas besoin d'évaluer. Méta. Charset est égal à UTF-8. Nous n'avons pas besoin d'écrire meta nommé largeur de contenu de la fenêtre est égale à la conception largeur de tiret échelle de tiret initiale est égale à 1 parce que c'est douloureux d'écrire sur chaque fichier. Au lieu de cela, nous pouvons écrire à la fois. Nous pouvons l'écrire une fois, et nous pouvons étendre à partir de ce fichier. Et à l'avenir, ce qu'on va faire, c'est que je vais te montrer comment on peut juste changer un petit morceau de ça pour qu'on n'ait pas à écrire la même ordure encore et encore. 13. Blocs de modèle: D' accord, regardons ajouter des blocs. Fermons tout ça comme si on ouvrait ce projet depuis le début. Ouvrons des modèles TIL basés sur HTML. Et qui est également ouvert la page d'accueil des modèles de flux. Et donc nous sommes des pages d'accueil s'étendant à partir de ce point de base HTML. Et ce que je peux faire est de diviser cela aussi à la base de l'événement sur la droite et nous avons la page d'accueil sur la gauche. Et voyons si je peux rendre ça un peu plus petit. Espérons que cela est toujours visible pour vous. Espérons que vous n'êtes pas sur un très petit téléphone. Mais oui, en allant de l'avant, disons que nous voulions changer ce titre. Ce qu'on pourrait faire, c'est ajouter ce qu'on appelle un bloc. Et donc il ressemble à ce bloc, titre et bloc. Et c'est tout ce qu'on va faire. Maintenant, nous allons littéralement copier ça. Alors faisons un clic droit, copiez-le ici, collez. Et nous pouvons changer le titre de cette page, changer le titre, le titre de la page d'accueil. Et on peut voir, oh, étiquettes non fermées, qu'est-ce qu'on cherche ici ? Et c'est parce que j'ai en fait une faute de frappe juste ici et là, j'ai besoin d'un signe pour cent. Et donc c'est à ça que ressemble un bloc. En fait, c'est un bon moment. Bonne raison, je suppose que pour moi d'expliquer l'erreur de syntaxe. Donc, nous utilisons une accolade bouclée ou, ou une accolade de moustache, pour cent signer le bloc de mots-clés, puis le nom de celui-ci. Et ça correspond ici. Ensuite, nous fermons ça avec exactement le contraire. Donc un signe pour cent, puis l'accolade de fermeture, mettez notre contenu à l'intérieur, tout ça. Et puis nous disons avec la même ouverture, fermeture du bloc de fin de syntaxe. Et donc cette balise d'ouverture correspond à cette balise d'ouverture et la balise de fermeture correspond à cette balise de fermeture. Et si jamais vous avez voulu par défaut, vous pouvez dire titre par défaut ici. Maintenant, allons de l'avant et ajoutons un peu de corps. Donc, dans notre page, nous voulons faire quelque chose avec ce corps. Donc, nous pouvons dire que cela s'étend à partir du point de base HTML, mais créons aussi un blocage ici, un bloc, appelons-le corps et le bloc de fin. Assurez-vous que j'ai ce signe pour cent. Et donc je ne fais pas la même erreur deux fois. Copiez, collez-le ici. Et ça va être de la page d'accueil. Cela n'a pas fonctionné pour moi parce que je n'ai pas enregistré le point de base HTML. Essayons encore ça. Et j'espère que ce boom est correct. Boom, on y va. Ça a vraiment fonctionné. Cela s'étend à partir du point de base HTML. Donc, cela va être mis sur chaque page. Et ça va être de la page d'accueil. Et c'est ce que j'ai écrit ici. Et si jamais je voulais le changer, je peux le faire ici. Maintenant, à l'avenir, si vous avez d'autres vues rendant d'autres modèles, au lieu d'écrire tout cela, tout ce que nous avons à faire est d'étendre à partir de la base et d' injecter simplement le titre du bloc et le corps du bloc ou tout autre bloc. Le truc, c'est qu'ils doivent correspondre. Tu dois avoir un corps de bloc. Tu dois avoir un corps de bloc. Vous devez avoir un bloc n, vous devez avoir un bloc n. Et Django vous dira s'il y a une sorte d'erreur de syntaxe pour ne pas comprendre les choses. Ça va, ça te le dira tout de suite et être très honnête et franc avec toi. Donc ça vous fera au moins savoir ce qui se passe. 14. Boucles de modèle: D' accord, allons de l'avant et passons à travers un tas de nos messages ici. Donc, si nous ouvrons notre navigateur, il dit juste que cela va être à partir de la page d'accueil et il ne fait pas de boucle à travers aucun de nos messages. Nous devons ajouter ces messages ici. Maintenant, nous avons fait une partie de la configuration un peu plus tôt où nous avions notre page d'accueil est un ListView. Il va lister tous nos messages et l'ensemble de requêtes, les choses que nous voulons poster ou boucle sur notre page va être tous les messages points objets tous classés par le plus récent et ne montrer que 0 à 30. Donc, les 30 premiers. Et puis nous avons dit que ce nom d'objet de contexte va être des messages. Et c'est important. Parce que si nous allons sur notre page d'accueil ici, ce que nous pouvons faire est dans notre corps. Et débarrassons-nous de ça. Nous pouvons dire pour la publication dans les messages, c'est là que nous obtenons cela, que le nom de l'objet de contexte, le nom de l'objet de contexte est égal aux messages. Et ça arrive juste là. Et c'est juste une boucle régulière, tout comme en Python ou JavaScript, irrégulière pour la boucle. Et puis nous disons fin pour. Et ici, nous allons avoir accès à chaque poste. Maintenant, ce post va parcourir tout dans cet ensemble de requêtes. Tous ces postes. Et chacun d'entre eux va être l'un de ces modèles up post. Donc, il a un texte et a une date dedans aussi. Alors allons de l'avant et juste montrer post.all. Et il a été écrit à la date du point de poste. Et regardez qui sont le premier post édité est ce qu'il a été appelé écrit sur plutôt devrait avoir dit le 6 Janvier, 2021, aussi clairement pas le bon moment que mon temps d'ordinateur est différent de mon temps de serveur. C'est bon. Nous pouvons définir l'heure du serveur plus tard. Ce n'est pas une grosse affaire. Je vais aller de l'avant et ouvrir notre administrateur et créons quelques messages de plus. Et donc, allons juste à slash Admin. Et c'est le deuxième post, enregistrez et ajoutez un autre. C' est le dernier post, sauver et oui, c'est tout. Nous avons donc trois postes là-dedans maintenant. Et on peut voir que ça arrive ici. C' est le dernier post. C' est le deuxième post et notre premier post. Allons de l'avant et séparons cela avec quelque chose comme une règle horizontale. On y va. Donc maintenant, il montre réellement nos messages. C' est littéralement tout ce que nous avons à faire à ce stade parce que nous avons fait tout le poids lourd à nos yeux. Nous avons mis en place notre modèle afin que les données puissent être stockées dans notre base de données. Dans nos vues, nous avons dit , hé, ce sera un ListView. Utilisez le modèle appelé barre oblique de flux qui va être ici. Donc c'est un peu autonome. Le modèle que nous allons faire passer la liste est le modèle de post. Le nom de l'objet contextuel va être utilisé juste là. Et l'ensemble de requêtes, ce que nous voulons être en mesure de parcourir est ceci. Et cela va obtenir tous nos messages points objets, points tous. Et encore une fois, il va leur commander l'ID inverse. Si nous voulions les commander du plus ancien au plus récent, nous dirons commande par ID. Au lieu de cela, nous allons dire ordre BY ID, le plus ancien à le plus récent ou aucun. Non, c'est la mauvaise façon de le dire. Du plus récent au plus ancien. C' est mieux. Et puis il suffit de couper ça, d' obtenir le premier jusqu'au 30ème. Et dans notre modèle, nous venons de dire simplement pour chaque poste dans ces messages, montrez-nous que le texte qui vient du texte de notre modèle. Et il a été écrit à cette date. Et c'est tout ce qu'il y a. 15. Installer Django Allauth: D' accord, allons-y et ajoutons, eh bien, une forme de système de connexion à notre site. Et cela va prendre plusieurs étapes. Et si je viens d'ouvrir un Firefox à nouveau, il n'y a pas de page de connexion n'est pas de page de logo et aucune page de réinitialisation de mot de passe. Et il y a un moyen vraiment, vraiment facile de le faire, et c'est un paquet tiers appelé Django all off. Et donc ce que nous allons faire, c'est installer ça. Et maintenant, donc à l'intérieur de notre environnement Pip ou PIP N pour que nous puissions faire pip install, Django Dash, tout éteint. Ou si nous le voulions, sortons de ça. On pourrait faire pip installer Django Dash, tout éteint. Et ça va aller de l'avant et installer Django tout pour nous. Donc, nous donnons juste ça une petite seconde et ça va l'ajouter à un fichier de verrouillage PIP pour nous. Et allons-y et revenons à l'intérieur de notre environnement Pip et nous pouvons faire pip, show, Django tout ça. Et je dois taper Pip devant ça. Et on y va. On voit Django tout éteint, 0 point 0. Maintenant, il y a quelques choses que nous devons faire pour que cela fonctionne. Tout ce qu'on a fait, c'est dire, hey, dans cet environnement virtuel, Django oth existe. Ce que nous devons faire aussi, c'est que nous devons aller dans nos paramètres dot pi, et où sont nos applications installées dans R applications installées, nous devons ajouter quelques choses ici. Donc, pour que Django fonctionne, tout d'abord, nous avons besoin des sites Django contrib activés. Donc Django contrib sites, et cela permet juste à Django d'être multi-site. Ensuite, nous voulons tout installer et n'a pas vraiment d'importance. Je mets généralement tous mes paquets tiers et mes paquets ou modules locaux tels que le flux sous les trucs Django. Donc, nous voulons mettre tous souvent là. Nous voulons également ajouter tous les comptes de point d'authentification. Et juste pour une bonne mesure, parce que tous les désactivés supportent également la connexion avec Facebook, GitHub, Twitter, et cetera, et cetera. Faisons tout le compte social point d'authentification. Et puis quelque part près du bas, allons de l'avant et ajoutons un tas de tous nos paramètres. Tout d'abord, il y a beaucoup de choses ici. Nous avons besoin d'un ID de site, et nous n'avons qu'un seul site, donc nous allons utiliser l'ID de site un par défaut. Ensuite, il va y avoir une URL de connexion. Et nous voulons juste définir cela pour être slash login parce que c'est assez standard. Ensuite, il va y avoir une connexion, URL de redirection, et c'est une fois que vous vous connectez, où est-il ? Supposons que je vous prenne, nous n'avons qu'une seule vue en ce moment, c'est notre page d'accueil. Revenons à notre page d'accueil. Ensuite, il y a l'authentification du compte. Si je peux épeler un de ce droit, méthode d'authentification est égale à. Et comment voulons-nous que les gens authentifient leurs comptes ? On veut leur dire, envoyez-leur un compte email, confirmez. Email sur get est égal à true. Et ce que cela fait, c'est lorsque vous cliquez sur ce lien dans votre e-mail. Il confirme automatiquement ou doivent-ils appuyer un bouton sur votre sur vos sites Web pour confirmer ? Nous allons dire qu'ils n'ont pas besoin d'appuyer sur un bouton juste sur une demande GET est assez bon. Je compte le courrier électronique requis est égal à vrai. Parce que nous voulons que tout le monde ait un compte de messagerie, parce que nous créons un service où vous voulez être en mesure d'envoyer des e-mails à personnes ou, au moins, de contacter des personnes. Nous allons faire la vérification de l'e-mail du compte est égal à deux, facultatif. Doivent-ils vérifier leur email ? Et donc cela peut être facultatif ou cela peut être obligatoire. Je vais rendre ça facultatif pour l'instant. Connexion au compte. E-mail. La confirmation est égale à true. On va juste alimenter quelques-uns de ces comptes se déconnecter. Cela signifie-t-il que quelqu'un doit effectivement remplir un formulaire comme dans son HTML ? Est-ce qu'il va être enveloppé dans un formulaire pour se déconnecter ? Techniquement, ça devrait être faux. Ce serait la bonne façon de faire le logo, mais nous allons faire la, la façon de tricher. Et on va dire, oui, ils peuvent simplement cliquer sur un lien et ça marche. Connexion au compte. Et la réinitialisation du mot de passe est égale à true. Et il y en a un peu plus. Mais avant de passer à travers toutes ces choses, allons de l'avant et tapons Django tous orthodoxes dans la machine Google tout connue. Et il y a toutes sortes de paramètres ici pour que nous puissions passer à notre configuration. Et c'est à peu près ce que je suis en train de configurer en ce moment n'est qu'un tas d'entre eux. Pas tous, mais un tas d'entre eux. Et donc à tout moment dans le temps, si jamais vous aimez oh, je ne me souviens pas ce que la ligne Caleb consacre les redirections de connexion authentifiées. Vous pouvez en fait simplement aller directement dans les documents et il vous dira exactement ce qu'il est censé faire et quelles sont les options. Est-ce vrai ou faux ? C' est facultatif ? Est-ce obligatoire, et cetera, et cetera ? Déconnexion du compte, la redirection est égale à. Retournons à la page d'accueil. Donc, quand vous vous déconnectez, où va-t-il rediriger l'utilisateur ? J'aime bien celui-là. Conserver le compte. Nom d'utilisateur. Le boîtier est égal à faux. Et donc le nom d'utilisateur, comme la canne, devrait être le même que Caïn, tous en majuscules. Et c'est ce que nous disons ici, que ce ne sont pas deux noms d'utilisateur différents. Session de compte, rappelez-vous est égal à true. Et ce que cela fait est si vous définissez ceci sur false, le formulaire de connexion va automatiquement avoir un bouton et ensuite il dit, souvenez-vous de moi pendant deux semaines ou quoi que ce soit. On ne veut pas vraiment ça. Nous avons l'habitude de dire, souvenez-vous pour toujours, inscription au compte, mot de passe. Entrez deux fois égal à true. Nous voulons que les gens saisissent leur mot de passe deux fois afin qu'ils ne se bloquent pas accidentellement de leur compte parce que ce n'est pas pratique. Et franchement, l'utilisateur va blâmer votre site Web pour cela, même s'ils l'ont mal orthographié. Nom d'utilisateur du compte longueur min va être, disons que le nom d'utilisateur le plus court doit être deux caractères. Et enfin, et peut-être le plus important, backends d'authentification vont être, et nous allons écrire un tuple ou un tuple ici. Et nous allons en ajouter deux. Et votre Django dot contrib dot auth dot backends, dot modal backend. Et c'était tout en majuscules. Ça aurait dû être tout en minuscules. On y va. Et le second est tout point de compte de point d'authentification. Auth backends. Puis cation backend. Allons de l'avant et sauvegardons ça. Et il dit que nous avons 700 migrations appliquées. Alors allons de l'avant et faisons Python géré haut, migrer, cool, qui les a tous appliqués. Last but not least, même si tout cela est configuré correctement, passons à nos URL dans notre application TIL. Donc, notre TIL où les paramètres vivent. Au lieu d'aller aux paramètres, on va aller aux URL. Et on va en ajouter un nouveau ici. Et nous voulons simplement ajouter une URL. Vide. Inclure toutes les URL de point d'authentification. Et ceci, ce n'est pas encore importé, alors allons de l'avant et importons ça. Et cela vient de Django Con moins ells, où Include vient de l'URL. Et gardons cela et voyons et il y a une sorte de problème là-bas. Oui. C'est pourquoi nous faisons habituellement des virgules de fin. Coucou, coucou, cool. Ok, donc tout est opérationnel. Quand nous retournerons à notre page ici, nous verrons rien ne se passera. Mais ce que nous pouvons faire maintenant, c'est que nous pouvons aller à slash login. Et cela ne va pas faire quoi que ce soit non plus parce que je suis déjà connecté en tant qu'administrateur. Faisons une nouvelle fenêtre privée. Et passons à slash login. Et maintenant, nous avons une page de connexion et nous pouvons simplement entrer l'adresse e-mail, entrer le mot de passe. Donc, je vais entrer dans mon adresse e-mail. Caleb a dit Caleb point IO et mon mot de passe. Et je vais cliquer sur Se connecter. Et maintenant, je suis connecté. Et si je le voulais, je pourrais aller me déconnecter et ça me déconnecte. Maintenant, à ce stade, nous n'avons aucune idée si nous sommes connectés ou déconnectés. C' est tout à fait bien. Tout ce que nous devions faire était de configurer la connexion utilisateur et la déconnexion. Et si nous le voulions, nous pouvons simplement aller slash s'inscrire. Et maintenant, les gens peuvent s'inscrire avec votre adresse e-mail. Ils peuvent mettre un nom d'utilisateur et entrer leur mot de passe deux fois et s'inscrire automatiquement. Alors fermez ça pour l'instant. Et c'est vraiment tout ce qu'il y a à cette leçon particulière. 16. Liens de connexion et de connexion à la planète: Allons de l'avant et ajoutez une déconnexion globale et un lien de connexion. Donc ça va être global. Donc, nous voulons que cela soit dans nos modèles TIL point de base HTML. C' est notre fichier global. Et donc ce que nous pouvons dire ici, c'est que nous pouvons vérifier si quelqu'un est authentifié ou non, comme dans, sont-ils connectés ou non ? Et nous pouvons simplement le faire avec si la requête point user_data est authentifiée. Et on peut dire autre chose. Et faisons ça. Vous êtes connecté. Ça ne me dérange pas qu'il y ait une faute de frappe là-dedans. Vous êtes déconnecté et voyons juste ce que cela fait. Donc ça dit que je suis connecté. Si j'ouvre ça dans une nouvelle fenêtre privée, ça dit que je suis déconnecté. Il dit ça juste là. Si je vais à slash login et me connecter avec mon nom d'utilisateur et mon mot de passe. Et maintenant ça dit que je suis connecté. Donc maintenant nous avons l'authentification, nous sommes connectés, nous sommes déconnectés, coucou, coucou, cool. Maintenant, nous devons ajouter ces liens. Donc tout ce que nous avons à faire est de dire, au lieu de dire que vous êtes connecté parce que ce n'est pas utile, quelqu'un saura s'il est connecté ou non. Nous pouvons ajouter un lien. Un HREF est égal à deux. Il va à un endroit quelconque, déconnectez-vous car l'utilisateur est déjà connecté. Ils veulent déconnecter le lien. S' ils sont déconnectés, ils veulent un lien de connexion. Donc un HREF est égal à un lien. On ne sait pas encore. Connectez-vous. Et rendons ça moche parce que nous rendrons plus jolis dans un peu. Ajoutons simplement ce HR là-dedans, cette règle horizontale. Ok, donc maintenant je suis connecté parce que ça me montre le lien de déconnexion. Allons de l'avant et ajoutons ce lien, car actuellement cela ne va nulle part. On fait ça. Nous disons l'URL, le verrouillage du compte, et cela vient de Django tout de suite. Et nous pouvons faire la même chose ici avec la connexion du compte, l'URL, la connexion du compte. Et maintenant, il semble qu'il n'a rien fait, mais si je clique sur déconnexion, il me consigne identifier clic login. Ça va me demander de me connecter et de me reconnecter. Et je peux me déconnecter. Donc maintenant, nous avons un système de déconnexion de connexion et notre modèle permet réellement à l'utilisateur de se connecter et de se déconnecter quand il le veut. 17. Extended des modèles Allauth: D' accord, jetons un coup d'oeil à l'extension de tous les modèles d'authentification. Comme quand nous sommes ici, nous allons à, revenons à la page de connexion. Ecoutez, nous avons des messages et nous pouvons les composer si nous le voulions. Quoi qu'il en soit, disons qu'on ne veut pas que ce menu apparaisse et qu'on veut juste le signe et se montrer. Comment, comment pouvons-nous faire ça ? Eh bien, tout d'abord, faisons ce django tout autour de GitHub. Et nous pouvons aller dans les modèles hors gabarits. Je compte. Et nous avons tous ces liens différents ici ne sont pas des liens mais des fichiers. Donc, comme prenons le login un. Et cela vient de, rappelez-vous que c'est important, le chemin est important. Donc, il vient de la connexion slash de compte. Donc disons qu'on veut écraser ça. Allons aux modèles TIL. Créons un nouveau dossier appelé compte et un nouveau fichier appelé point de connexion HTML. Et disons que c'est écrasé. Revenons à notre page de connexion et il est dit que c'est écrasé. Et donc ce que nous pouvons faire maintenant, c'est que nous pouvons copier tout ce code. Allons ici et copions tout ce code. Rejetez ça ici. Assurez-vous que nous étendons réellement correctement. Et fondamentalement, on vient de le remettre. Et si nous le voulions, nous pourrions le faire avec chaque dossier. Ce jangle nous donne. Et parfois il y a un cas pour ça et parfois il n'y en a pas. Maintenant, ça peut être un peu douloureux parce qu'il y a beaucoup de modèles ici, comme le changement de mot de passe, réinitialisation de mot de passe, réinitialisation de mot de passe fait réinitialisation de mot de passe à partir de clé, réinitialisation de passe à partir de la clé faite jeu de mot de passe, vous savez, sur et sur. Et nous pouvons le faire encore et encore et encore. Ça va te prendre quelques heures et ça va être douloureux et il y a une meilleure façon de vivre ta vie. Et nous avons donc un point de base HTML ici dans notre compte de modèles modèles. Je ne pense pas qu'on le sait. C'est juste là. Parfait. Il y a une meilleure façon de vivre la vie. Ok, regarde ça. Donc, dans notre dossier Django all auth compte, il y a un fichier appelé base dot HTML. Et c'est entrer dans un peu de fantaisie modèle ici. Mais ce que nous pouvons faire, c'est de les surclasser tous en même temps. Au lieu d'en faire un à la fois où nous pourrions écraser un tas d'entre eux. Il va toujours avoir le contenu, mais il va pouvoir s'étendre à partir de notre point de base HTML, ce qui va être très, très important. Et vous pouvez voir que si Doo-doo-doo-doo compte basé sur HTML, si nous allons ouvrir notre point de base HTML et voir ceci. Ceci est notre fichier HTML point de base. Et nous allons le changer de, au lieu d'étendre à partir d'un compte de base barre oblique point de base HTML, allons simplement étendre à partir de notre point de base HTML. Et allons voir à quoi ça ressemble. C' est notre connexion HTML point de base qui a fonctionné, qui a fonctionné pour nous. Maintenant, le problème ici est qu'il utilise du contenu de bloc. Et j'ai dit qu'on appellerait ce corps de bloc. Maintenant, nous pourrions changer ceci en contenu et ensuite le changer sur notre page d'accueil si nous le voulions. Ou on pourrait en avoir 21 ou on pourrait les nicher si on le voulait. Alors allons de l'avant et imbriquons simplement ceci. Parce que ce sera probablement le moyen le plus simple. Bloquer, contenu et bloquer. Et regarde ça. On a tous les trucs de connexion. Maintenant, ce qui est bien à ce sujet en particulier, c'est que si nous revenons dans notre login, qui s'étend à partir du point de base HTML, nous n'avons pas le titre de la tête de bloc. On n'a pas, qu'est-ce qu'on a d'autre ici ? Obtenez des fournisseurs. Donc, en tant que contenu de bloc, pouvons-nous fermer cela ? On ne peut pas fermer celle-là. indentation est bizarre là-dessus. Oui. D'accord. Donc je suppose que nous allons nous en tenir à cet exemple. Il n'y a pas de titre de tête. Et en fait, vous pouvez voir ici le titre par défaut existe. Il tombe en arrière parce qu'il n'y a pas de titre de tête. Dans notre point de base HTML. Nous n'avons que le titre, nous appelons le titre, ils l'ont appelé titre principal. Donc, ce que nous pouvons faire au lieu de faire tout ça, c'est que nous pourrions revenir en arrière et simplement surévaluer leur fichier de base. Alors allons au compte et prenons leur fichier de base. Et transmettons-le à notre fichier de base. Et pour que nous puissions prendre tout ça si nous le voulions. Prenons la version brute de ceci. Et nous allons créer un nouveau fichier appelé point de base HTML. Et d'accord, donc c'est un peu comme notre point de base H2O et ce n'est en fait pas bon. Ce qu'on veut faire, c'est qu'on veut se débarrasser des trucs supplémentaires pour qu'on n'ait pas besoin de tête supplémentaire, de titre supplémentaire. On n'a pas besoin de tout ça. Allons ici, débarrassons du corps supplémentaire. On n'a pas besoin de ça. Ils ont en fait un bloc et on vous appelle corps, regardez ça. Et donc ce qu'on peut faire, c'est bloquer le corps. S' il y a des messages, vous allez le menu des messages. On veut montrer ce menu ? Non, ne montrons pas ce menu. Débarrassons-nous de ça. Et nous allons peut-être rendre cela juste un peu plus agréable à regarder parce que ce retrait est étrangement mauvais pour une telle bibliothèque si populaire ou un paquet si populaire que le retrait est juste étonnamment terrible. Ok, débarrassons-nous de ces trucs. Et donc nous sommes juste en train de remplacer leur fichier HTML point de base. Et ce que nous voulons dire maintenant est étendre ou étend notre fichier HTML point de base. Pas la barre oblique du compte point de base HTML, mais notre base. Il va chercher notre base d'abord, puis il va chercher le fichier HTML point de base slash du compte. Allons de l'avant et sauvegardons ceci et voyons ce qui se passe. La connexion est en fait un mauvais exemple parce que nous l'avons écrasé. Allons à mot de passe oublié et verrouiller. Il garde nos trucs HTML point de base ici. Disons qu'on veut s'inscrire. Il garde nos trucs HTML point de base là-dedans aussi. Alors faisons à faire, à faire. Débarrassez-vous de ça parce que nous n'avons plus besoin de ça. Et nous allons peut-être ajouter un lien vers la page d'accueil de chaque page. Et alors ajoutons simplement un petit lien rapide. Un HREF est égal à barre oblique, c'est juste notre page d'accueil. Je vais appeler ça chez moi. Et nous n'avons pas besoin d'utiliser une URL ici juste parce que la page d'accueil est déjà, la page d'accueil va être la même que nous utilisions une barre oblique ou que nous utilisions une URL Django. Donc, nous avons la maison, nous avons login et allons de l'avant et laisser tomber ce login un. Allons nous connecter. Supprimer, déplacer vers la corbeille. Et ça ressemble à peu près à la même chose. C'est parfait. C' est ce qu'on veut. Nous voulons que cela fonctionne de cette façon. Et donc, à ce stade, nous avons maintenant étendu tous les modèles d'authentification. Et encore une fois, il y a vraiment deux façons de le faire. Si je retourne ici, on peut le faire un par un. Et dans certains cas, vous devrez peut-être écraser un tout. Juste parce que les raisons, votre raison pourrait être différente de mes raisons. Donc je ne peux pas vous dire une raison exacte, mais c'est possible de le faire. Ou vous pouvez dire simplement les écraser tous par, en remplaçant leur fichier de base. Donc, je viens de prendre leur fichier de base s'il y a des messages, montrer quelques messages ici et étendre à partir de notre base. Donc, à quoi ressemble cette chaîne de commande maintenant est que la connexion va aller à la base de slash du compte, c'est Django off compte slash point de base HTML. Et au lieu de montrer tous ces trucs, nous avons dit, juste montrer ce que nous voulons montrer et étendre à partir de notre HTML point de base, qui va ensuite injecter tout ici. Et comme ça, nous avons maintenant la possibilité de programmer notre page. De toute façon, s'il vous plaît. 18. Ajouter des CSS Tailwind: Allons de l'avant et ajoutons du vent arrière pour que notre côté soit un peu plus agréable. Et nous allons vraiment voler, certains composants ne voleront pas, mais nous allons utiliser certains composants que d'autres personnes ont remercié open-source. Donc, les premières choses nous devons d'abord aller à notre point de base HTML. Et ici, nous devons ajouter une sorte de CSS. Et pour ce faire, ouvrons un nouvel onglet et allons à tailwind CSS. Mec, allons-y et commençons l'installation. Y a-t-il un CDN ? Et ici, nous ne voulons pas faire tout le truc frontal, nous voulons juste le CDN. Et ce n'est pas une façon de vivre votre vie en production d'ailleurs, parce que le vent arrière est un très, très gros fichier css. Mais pendant que tu fais du travail local, c'est tout à fait correct. Maintenant, allons de l'avant et voyons à quoi ressemble notre page maintenant. Ok, ça a fait beaucoup de réinitialisation. Beaucoup, beaucoup de réinitialisation. Donc, en fait, ce n'est pas une mauvaise chose. Nous pouvons maintenant y ajouter tout ce que nous voulons. Alors allons de l'avant et ajoutons une sorte de navigation. Maintenant, je sais pour un fait que je veux cette navigation particulière et tout j'ai fait était de définir ceci pour taper dans les composants arrière de Google. Et j'ai trouvé une navigation que j'aime vraiment. Et c'est donc notre navigation ici. Et ce que je veux faire ici, c'est montrer le code. C' est tout le code. On va copier tout ça. Et faisons ça. Poussons tout vers le bas pour l'instant et mettons ça en haut. Et qu'est-ce qu'on a d'autre ici ? On a autre chose ? Donc, nous avons CSS qui vient avec. Déplaçons ça dans notre tête là où c'est censé être. Et disons simplement que le composant provient de ce lien particulier afin qu'ils obtiennent le crédit pour cela. Et voyons à quoi ça ressemble. Ok, pas mal, pas mal. On ne veut pas tout ça. Et nous voulons une sorte de zone de contenu ici aussi. Alors commençons à regarder à travers certains de ce logo. Permet de changer ce logo de logo à TI. L signifie aujourd'hui, j'ai appris tableau de bord. Ce lien peut aller directement à la maison. De quoi d'autre avons-nous besoin ? Nous avons besoin de liens de déconnexion. Alors débarrassons-nous de toutes ces choses entre la maison et le logo. Logo, logo, logo. Et tout ce que j'ai fait c'était de supprimer un tas de trucs là-bas. Donc maintenant, nous avons connexion de déconnexion ou pas de connexion, mais la maison analogique sortie. Ajoutons une connexion car nous ne savons pas si nous sommes actuellement connectés ou non. C' est ainsi que les gens disent qu'ils disent que le C est un lien de déconnexion et s'ils voient une longueur de logo à aller, je me connecte. Et s'ils voient une longueur de connexion, ils montent, se déconnectent. Ok, donc on peut le faire assez facilement sans lien de déconnexion. Ce que nous pouvons faire est si la demande, cet utilisateur est authentifié. Si c'est le cas, si l'utilisateur est authentifié, affichez un lien de logo. Et où est ce logo ? On a écrit ça en deux ou trois. On a écrit ces leçons il y a deux. Déconnectez-vous. Allons-y et vole ça. Mets-le juste là-dedans. Ensuite, nous pouvons dire si l'utilisateur n'est pas connecté, sinon ils sont déconnectés. On pourrait prendre tout ça, copier et coller. Et au lieu de déconnecter le compte, nous voulons la connexion, et nous voulons que cela signifie login. Connectez-vous. Et cela descend à notre page de connexion. On dirait que nous n'avons rien fait parce que nous n'avons pas encore de zone de contenu ici. Modifions également cette icône. Parce que lorsque nous nous connectons et déconnectons actuellement les icônes ou le même. On a une icône ici quelque part ? Oui. Je classe Bx, Bx se déconnecte. Nous allons nous connecter. On y va. S'ils l'ont juste changé et le voient à nouveau, annulez. Et je vais me rafraîchir sur le côté gauche. On y va. Ça a bien fonctionné. Vous pouvez toujours juste Google aussi bien, icônes de boîte. Faisons ça. Icônes de boîte, CSS, Icônes de boîte. Et nous pourrions utiliser n'importe quelle icône que nous voulons ici. C' est plutôt cool parce que de jolies icônes aussi, j'aime celles-ci, pourraient les utiliser dans un futur projet de la mienne. Ok, donc tout va bien. Nous avons maintenant besoin d'une zone de contenu. Et donc, à ce stade, on pourrait vouloir mettre des trucs ici. Donc on a du charbon flexible avec 56, yada, yada, yada, yada. Essayons ça. Div. Mes affaires ici. Troisièmement, nous allons ajouter un peu de rembourrage. S, p, tiret 16. Ary sont qui semble un peu mieux et ensuite nous pouvons jeter tout notre contenu là-dedans. Alors faisons défiler vers le bas. Débarrassons-nous de ce qu'on n'utilise plus. Nous utilisons les liens de déconnexion de connexion. On n'a plus besoin de ça. On n'a plus besoin de ce HR. Nous avons besoin du corps et du contenu là-dedans. Et on peut juste déplacer ça. On y va. Donc, ça n'a pas vraiment l'air génial. Honnêtement. Je ne vais pas vous montrer exactement comment le styliser, juste parce que c'est un cours complet de front end seul. Mais ce que vous pouvez faire, c'est que vous pouvez toujours juste inspecter et dire, hé, je dois les coiffer différemment. Et vous pouvez utiliser le vent arrière H 1s, ou vous pouvez remplacer le modèle et y ajouter des classes si vous le souhaitez. Alors allons de l'avant et connectez-vous. Et je suis maintenant connecté et je peux maintenant me déconnecter si je le voulais. Et donc nous avions simplement ajouté le vent arrière avec une belle petite navigation sur la gauche. N' oubliez pas à tout moment, vous pouvez toujours vérifier le code source que j'avais fait des commits en cours de route. Donc, vous pouvez voir juste le code que j'ai changé dans chaque leçon individuelle. 19. Des publications de style Tailwind: D' accord, allons-y et rendons nos messages agréables en utilisant tailwind CSS. Maintenant, j'ai déjà trouvé un composant particulier que je veux vraiment utiliser. Et donc ce que je vais faire, c'est juste sur mon autre moniteur ici, je vais copier ce lien et continuer à coller. Et c'est à ça que je veux qu'un poste ressemble. Maintenant, le truc est qu'on n'aura pas tous les détails tout de suite. On va devoir les ajouter dans un petit peu. Nous ne savons pas qui a écrit quoi, nous ne savons pas s'il y a un lien de détail. Nous n'avons pas de catégories, nous n'avons pas de titres non plus. C' est littéralement juste du texte. Alors, comment pouvons-nous ajouter cela ? Allons-y et copions tout ce code. Et vous pouvez voir le code ici. J' ai simplement copié tout. Et ce que je peux faire est d'aller dans mon flux et où chaque message est-il affiché ou où est-il affiché ? Il est affiché sur notre page d'accueil. Alors allons de l'avant et faisons de la place pour que nous puissions travailler ici et coller ça là dedans. Et disons que ce composant provient de ce lien. Maintenant, cela va changer ces trois messages laides pour ressembler tout de même, mais nous pouvons les modifier. Et ça n'a pas l'air trop mauvais, n'est-ce pas ? Je, j'aime ça un peu. Donc ce que nous pouvons faire d'abord, c'est cette date, changeons cette date. Nous savons que chaque publication comporte un élément de date ou un attribut de date, propriété Date. Ok, ça marche un peu mieux. Disons qu'on ne voulait pas qu'on dise la date complète. On peut faire une date de pipe. Et faisons f, j, y, g, a. et je vais te montrer où j'ai eu ça dans une seconde. Donc, où j'ai eu ce bizarre f, j, y j, c'est de la date de PHP.Net. Et passons au manuel de la date. Et je suis peut-être sur la mauvaise page, mais j'ai trouvé un exemple qui fonctionne néanmoins. Donc voici celui que j'ai utilisé. Et c'est en fait un que j'ai tendance à utiliser sur beaucoup de mes projets esprits très similaires. Vous pouvez utiliser m, d, y, et il vous montre comme mois, jour, année, vous pouvez, il vous montrera des exemples de ce que tous ces peuvent faire. Donc, c'est juste le manuel de date PHP. En ce qui concerne les formats de date. Voyons ce que ça fait. Oui, non, pas tout à fait. Le premier exemple était meilleur. Faisons comme si je ne t'avais pas montré celui-là. D' accord, on n'a pas de titre. Allons-y et débarrassons de ce titre. Où êtes-vous et nous n'avons pas non plus de catégories. Je vais commenter cette catégorie. Donc ça ne dit plus design là-dedans. Nous n'avons pas de titre là-dedans aussi, alors allons-y et découpons ce titre. Et notre post est censé ressembler à ce texte de point de post. Et cela rendait ses messages beaucoup plus petits que prévu. Donc ce qu'on peut faire ici, c'est voir. Et tout ça, donnons juste une largeur à ça. Nous pouvons le faire aussi en vent arrière, mais ce module particulier, Django to1, n' est pas un parcours de vent arrière, l'a fait, donc nous nous concentrons davantage sur le côté Django des choses que sur le côté vent arrière des choses. Mais nous avons encore besoin de choses à regarder, et nous avons toujours besoin de choses qui sont belles. Allons de l'avant et sauvegardons ça, et ça a l'air un peu mieux. Ajoutons quelques tâches ici. Le Read More. On ne sait pas encore où c'est censé aller. Donc, avant de terminer ce module, nous allons regarder à travers fondamentalement tout notre code source pour faire, faire ajouter une URL de détail. Et de quoi d'autre avons-nous besoin ici ? Nous avons besoin que cet utilisateur soit différent. Et alors ajoutons une autre chose à faire ici. Pour ce faire, l'utilisateur a besoin d'un lien vers sa bio et une photo, une vignette et un nom. Donc c'est un peu. Donc au lieu de dire, hé, ouais, on va tout faire dans la prochaine leçon , car la prochaine leçon pourrait probablement durer 304050 minutes. Je ne sais pas vraiment. Au lieu de cela, nous allons créer un peu à faire, ce qui veut juste dire, Hey, nous avenir. Chaque fois que nous voyons cela, sachez juste que nous devons jeter un coup d'oeil pour cela ou nous devons le trouver pour le faire. Et nous devons lire ce qu'il nous dit de faire. Donc c'est une façon de garder une trace de votre code. Maintenant, si votre tâche ne se met pas en évidence comme la mienne, c'est bon. J' utilise une extension appelée Todo tree, appelée ouais, ça s'appelle Todo tree est par grognement, laid. Donc pour l'instant, honnêtement, ça marche. Cela ne fonctionne pas aussi bien que nous le voulons. Tout ce que nous voulions vraiment faire était d'ajouter un joli petit composant ici. 20. Ajouter une application de profil: Ok, allons de l'avant et ajoutons des profils, parce que pour l'instant nous n'avons pas de profils d'utilisateurs. Et c'est l'une des choses que nous devions ajouter dans la dernière leçon. On ne les a pas. Allons de l'avant et créons les. Et donc tout ce que nous avons à faire ici est que vous Python géré haut démarrage application, et appelons ce profil. Et nous voyons un nouveau dossier ici. Allons dans nos Paramètres et activons cela. Nous allons donc dans nos applications installées. Je vais l'appeler profils parce que c'est ce qu'on appelle ça Profils. Et puis dans notre modèle.predict, nous pouvons créer un nouveau modèle de profil. Alors faisons le profil de classe, et ce sera un profil d'utilisateur. Il prend des modèles, point Model comme il est hérité. Héritage. L' utilisateur va être une sorte de lien vers l'objet utilisateur normal. Maintenant, si c'était un peu déroutant, fermons quelques-unes de ces choses. Tout d'abord, nous avons des utilisateurs. Et avec ces utilisateurs, peut-être que nous voulons utiliser le prénom et le nom, mais vous ne voyez pas d'endroit où télécharger une image ici. Et nous devons donc prolonger cela. Et donc une façon de le faire dans Django, et il y a généralement plusieurs façons de faire les choses dans n'importe quel cadre. Mais une façon est de créer simplement un autre modèle, comme celui appelé profil et de lier l'utilisateur d'origine à ce profil. Et c'est ce qu'on va finir par faire. Et donc nous disons que l'utilisateur est égal à deux modèles, un à un champ. Et cela va prendre un utilisateur Django qui va importer en une seconde seulement. Sur suppression est égal aux cascades de points du module. Donc, lorsque nous supprimons cet utilisateur, supprimez également ce profil. Et cela nous donne un nom de profil connexe. En fait, en fait, cela ne nous a pas encore donné un nom connexe. Donc ce que je vais faire est de commenter ça. Et nous devons, à partir de, nous devons importer cet utilisateur. Donc, faisons à partir de Django dot contribuer, dot, auth, dot models. Je ne me souviens jamais de celui-là. Importer l'utilisateur. Voyons si Django se plaint de ça. Que pas de plaintes, bon, bon, bon. Allons de l'avant et faisons des migrations. Créé un profil pour nous migrer. Et inscrivons ceci dans notre administrateur. Jetons donc un coup d'oeil à ce que nous avons déjà fait. Nous avons fait ça avec le flux sysadmin. Donc, copions tout cela, fermez ça et allez dans l'administrateur des profils. Et ceci est lu à travers cette ligne à la fois. Nous avons besoin du module d'administration des modèles. Qu' est-ce qu'on a ici des modèles ? n'y a pas de post-modélisation ici. Ça ne s'appelle pas « post », c'est « profil ». Et donc, au lieu de post admin, nous allons l'appeler Profile and Profile admin. Et nous allons nous rafraîchir ici et nous allons voir attendre. Profils. Maintenant, il n'y a pas encore de profil. Donc, ce que nous pouvons faire, c'est que nous pouvons attacher manuellement un profil yards. Alors créons un nouveau profil ici. Et cet utilisateur va être Caleb, et cet utilisateur va lier à cet utilisateur particulier. Et donc il y aura toujours une relation individuelle ici. Donc, chaque fois qu'il y a un utilisateur, il devrait y avoir un profil. Chaque fois qu'il y a un profil, il devrait y avoir un utilisateur. Je regarderais cet objet de profil et n'a pas de nom propre. Allons de l'avant et ajoutons ce nom propre. Content que ça se soit pointé. Sourd, soulignement, trait de soulignement, chaîne, soulignement, soulignement. Self, retour, auto point utilisateur. Ne pas nom d'utilisateur. Et attendez juste que ça se charge. Et on y va. Donc, il n'y a pas de raison d'avoir cela à ce stade. Mais nous allons étendre l'utilisateur en ajoutant un profil, qui peut alors avoir une miniature ou une sorte d'image. Allons de l'avant et réactivez ce profil de nom associé. Et voyons si cela fait qu'une autre migration ne fait jamais mal à vérifier si vous avez besoin d'effectuer une nouvelle migration. Alors allons de l'avant et migrons ça. Et nous sommes prêts à y aller. Une dernière chose que nous voulons faire ici, c'est que nous voulons ajouter ce qu'on appelle un signal. Et donc l'idée ici est, chaque fois que nous créons un nouvel utilisateur, également créer un nouveau profil automatiquement. Et ce qu'un signal fait, c'est un peu comme un crochet web ou un crochet dans React. Ou si vous venez de la ligne de JavaScript, c'est beaucoup comme un rappel. Ainsi, lorsqu'un utilisateur est créé, nous pouvons prendre une action particulière. Et c'est ce qu'on appelle un signal dans Django. Donc nous allons faire def, créer un profil utilisateur. Nous allons demander l'expéditeur ou pas demander mais a reçu un oui, l'expéditeur, l'instance créée et les arguments de mots-clés. Et si jamais vous vous demandez plus sur les signaux, parce que ce cours ne va pas aller trop profondément dans les signaux. Le docteur Django, un excellent endroit pour commencer. Et nous allons donc ajouter une docstring et ici, Créer un nouvel objet de profil. Objet. Lorsqu' un utilisateur Django est créé. Simple est que nous allons de l'avant et dire si créé est vrai. Objets point de profil, point créer utilisateur, c'est ici. Par conséquent, l'utilisateur de point de profil est égal à la nouvelle instance d'utilisateur. Et pour que cela fonctionne, nous devons l'enregistrer en tant que récepteur pour recevoir ce signal. Post save, et cet expéditeur va être utilisateur. Et donc ce que nous disons ici, c'est qu'il y a un signal quelque part. Et pensez à ça comme un signal dans l'espace. Et nous avons une antenne parabolique géante et nous essayons de recevoir des signaux. Ensuite, nous recherchons un type particulier de signal. Nous sommes à la recherche d'un post sauver. Donc, une fois que l'utilisateur est enregistré ou une fois qu'un objet est enregistré, nous disons plutôt de vérifier quel type de données est entré. Donc, si ces données sont un utilisateur et qu'elles viennent d'être enregistrées, exécutez ceci. Et donc nous devons maintenant Doo-doo-doo-doo, importer le récepteur et économiser après. Nous n'avons pas besoin d'importer l'utilisateur car nous avons déjà l'utilisateur. Nous avons donc besoin d'importer le récepteur et enregistrer ou poster enregistrer plutôt. Donc, à partir de Django dot db, modèles points, signaux de points, importation, post , save, nope, post save. On y va. Et de Django, j'étire vraiment ma mémoire ici. À partir de l'envoi de points Django, importer le récepteur. Django ne s'est pas plaint. Cool. Alors maintenant, nous pouvons aller de l'avant et créer un nouvel utilisateur. Et idéalement, cela créerait aussi un nouveau profil. Revenons dans notre administrateur. Créons un nouvel utilisateur. Test. Mettez un mot de passe là-dedans. Et disons simplement si nous allons dans les profils. C'est là. Il l'a créé automatiquement pour nous. Ainsi, il crée automatiquement un profil chaque fois que nous créons un nouvel utilisateur. Et cela maintient juste que la relation un-à-un existe. Et comme un résumé rapide, ce que nous avons fait, c'est que nous avons dit, hey, chaque utilisateur a besoin d'un profil attaché à lui. Nous n'avons pas encore ajouté quoi que ce soit en particulier, sauf celui d'un à un champ qui connecte vraiment cet utilisateur à ce profil. Ensuite, nous avons dit que chaque profil devrait être appelé self.users dot username, quel que soit ce nom d'utilisateur. Donc, c'est dire utilisateur de point auto, allez à cet utilisateur, cet utilisateur de Django. Nous savons que chaque utilisateur de Django a un nom d'utilisateur et l'utilise comme une représentation pour son nom, son nom d'objet. Ensuite, nous avons dit, chaque fois qu'un utilisateur est enregistré, exécuter cette fonction, créer un profil utilisateur. Il va accepter l'expéditeur. Notre expéditeur ici. Notre instance va être l'instance utilisateur. Donc, si je crée un nouvel utilisateur appelé test, il va l'envoyer à l'utilisateur test comme, par exemple, vérifier si cet objet a été créé. Et puis un tas d'arguments de mots-clés dont nous n'avons pas besoin de nous inquiéter. Si un nouvel utilisateur a été créé après l'enregistrement de la publication. Ensuite, nous pouvons dire point de profil object.Create utilisateur est égal à cette instance. Et cela crée juste un nouveau profil pour nous chaque fois qu'un nouvel utilisateur est généré. Et nous avons appris sur les récepteurs et les signaux, comment un signal est comme une radiofréquence dans l'espace, et comment un récepteur est comme votre antenne parabolique. 21. Ajouter un paquet de vignettes: D' accord, allons de l'avant et installons une bibliothèque de miniatures. Donc, fermons ceci de notre dernière leçon et nous devons faire quelques choses pour l'installer. Donc, tout d'abord, nous devons trouver une bibliothèque avec laquelle travailler. Donc, ce que je vais faire est juste d'ouvrir mon navigateur et de taper le paquet de vignettes Django. Et nous pouvons aller à Django Packages.org et regarder à travers un tas d'entre eux. Il y a des vignettes Django, Jim, Django, vignettes Maker. Nous allons utiliser la vignette de Sorrell parce que je suis familier avec celle-ci. Je l'ai utilisé dans Django 101. Si vous avez pris Django un à un, vous l'avez aussi utilisé. Donc, nous savons que ça marche. Et nous devons aller dans l'installation, obtenir le code. C' est ce que nous faisons pip installer vignette de sol ou parce que nous utilisons Pip env, Nous pouvons le faire d'une manière légèrement différente. Nous pouvons sortir de notre Pip env et nous pouvons faire pip installer la vignette Sorrell. Et on donne juste une seconde pour faire son truc. C' est déjà fait. Donc on peut faire Pip env, shell. Et fais Pip. Pip montrer la vignette de tristesse. Et c'est là. Maintenant, si vous n'utilisez pas préventif, vous pouvez toujours faire pip installer Sorrell, miniature. Vous pouvez également le faire à l'intérieur d'une env Pip. Il ne l'ajoutera tout simplement pas à votre fichier Pip ou à votre verrouillage de point de fichier Pip. Maintenant, comment installer cette chose ? Nous ajoutons la vignette de points Sorrell, pas seulement le chagrin, ce que nous faisons habituellement avec le paquet Django. Juste le nom du paquet. Nous allons faire le nom du paquet, puis un dossier là-dedans. Et c'est comme ça que nous allons activer ça. Revenons donc à VS Code, et ouvrons un settings.js. Et juste quelque part ici, jettez dans la vignette de point de sol. Et nous devrions voir que Django redémarre. Nous avons une migration au chômage. Allons de l'avant et lançons cette migration. Python a géré une migration élevée. Et cela vient d'appliquer la vignette 0-0, 0-1 initiale, et c'est de Sorrell miniature point. Maintenant, comment utilisons-nous réellement cette utilisation de modèle ? C'est ce que nous voulons. Nous voulons à partir de point de sol, champ d'image d'importation de vignettes, puis utiliser l'image est égale au champ d'image , puis télécharger à l'endroit où nous voulons télécharger à. Et ça va être à l'intérieur de notre dossier média. Donc, il pourrait créer un sous-dossier. Et à l'intérieur de notre dossier média appelé n'importe quoi. Je pense qu'on va sauter ça et on va juste utiliser cette partie ici. Alors allons de l'avant et ouvrons nos modèles de profils. Et nous voulons ajouter ça ici. Et puis on peut écrire ça juste là. L' image est égale au champ d'image qui provient du point Sorrell, vignette et du téléchargement vers n'importe où. Appelons ça les profils. J' ai dit qu'on le ferait, on l' ignorerait, mais peut-être pas pour qu'on puisse voir ce qu'il fait et où il va. Et maintenant vous pouvez voir que Django se plaignait. Django dit en fait, je vais, nous ne pouvons pas utiliser le champ d'image parce que l'oreiller n'est pas installé, mais nous devons aller installer Pillow. Alors sortons de Pip env à nouveau. Pip installer un oreiller avec un P. majuscule , revenons dans notre Pippin. Et disons que l'oreiller Pip montre. Et cela va juste nous montrer qu'il a été en fait installé. Nous n'avons pas à vérifier à chaque fois. J' aime vérifier juste pour m'en assurer, juste parce que j'ai plusieurs versions de Python et beaucoup de bouffées bizarres de Python sur mon ordinateur. Je veux juste m'assurer que cet oreiller est bien installé. Maintenant, si nous passons à ce terminal et que nous redémarrons simplement Django, nous ne verrons plus d'erreurs. Nous ne verrons plus de plaintes. Donc, c'est une bonne nouvelle. Maintenant, à ce stade, nous pouvons aller et modifier notre profil utilisateur. Alors, allons dans notre administrateur et allons aux profils. Et ça dit, oh non, pas une telle colonne. Ce qu'on a fait, c'est qu'on a fait une migration pour la vignette du sol, mais on n'a pas fait de migration et ensuite on a fait cette migration pour notre nouveau champ sur notre profil. Alors allons-y et faisons-le. Faisons en Python géré haut faire des migrations. Et parce que nous disons qu'il ne peut pas être nul ou vide, nous devons fournir un unique. Donc ce que je vais faire ici, c'est que je vais vous montrer que je vais taper un pour fournir une valeur par défaut unique. Et parce qu'on n'a pas d'image, je vais taper le numéro un. Et c'est assez bon pour ce que nous avons. Maintenant. Allons de l'avant et faisons ces migrations, puis exécutons ces migrations. Et revenons à notre rafraîchissement du navigateur. Et nous pouvons voir que cela fonctionne. Coucou cool. Donc, cette image en a actuellement un. Si je clique sur ce, tout d'abord, il va au port hôte local 8 mille barre oblique 1 point un dossier immédiat. On n'a pas encore arrangé ça. Et l'image est exactement ce que nous avons tapé. Donc, même si nous avions notre configuration de dossier multimédia, ce que nous n'avons pas, cela ne va toujours pas montrer une image. n'y a pas d'image appelée Just One. C' est généralement comme 1.jpg, F1 point PNG, 1.et quoi que ce soit. Et ce n'est pas là. Et c'est ce que ça a fait. Ce que nous pouvons faire à la place, c'est que nous pouvons dire naviguer. Et nous pourrions sélectionner comme animé ab.js JPEG et enregistrer continuer l'édition et regardé s, Cela va dans les profils animés. Maintenant, ça ne va toujours pas être trouvé et c'est normal. Notez qu'il a créé un dossier appelé Profils, puis un a téléchargé l'image pour nous. Donc, c'est tout ce que nous allons faire pour cette leçon particulière à venir, nous allons travailler à faire en sorte que cela fonctionne réellement en ajoutant nos URL médias. 22. Ajouter des paramètres de médias: Ok, donc nous n'avons pas encore configuré l'URL des médias et nous devons le faire. La raison pour laquelle nous faisons cela est que, fondamentalement, cela indique à Django où télécharger tous nos fichiers. Maintenant, si nous regardons, si nous regardons cela dans notre colonne de gauche ici, il y a déjà un dossier appelé Profils. Et donc il vient d'ajouter le DOJ animé accroché à lui. Et c'est moi en tant que personnage animé. Mon ami Steve l'a fait pour moi. Donc on ne veut pas ça. Nous voulons que toutes ces images entrent dans son propre dossier appelé media. Donc d'abord, ce que je vais faire, c'est que je vais juste supprimer parce que ça n'a pas sa place là-bas. Et aucun mal fait si vous avez supprimé parce que nous n'avons actuellement pas d'URL d'image de travail de toute façon. Donc, tout d'abord, fermons ceci et allons dans notre settings.js. Et c'est quelque part, je ne sais pas, je suppose que près du sommet. Faisons ça. Nous avons besoin d'une racine médiatique. La racine du média est égale à quelque chose. Os point, point jointure. Et puis le désastre de base qui vient de la ligne 16 juste au-dessus de nous. Et un dossier appelé média. Et puis nous allons dire que l'URL des médias, comment cela devrait être servi, va être un média slash avec une barre oblique à la fin. Ce n'est pas tout à fait suffisant pour nous y amener. Nous devons également entrer dans nos URL ou URL Django. Et nous devons tout d'abord inclure nos paramètres car nous allons utiliser les URL multimédias que nous faisons à partir des paramètres d'importation Django.com. Et nous allons devoir en importer un de plus ici. Et ça va venir des URL de confiance, c'est papa. Je crois. Copions simplement ça pour que nous n'ayons pas à tout taper à nouveau, statique. Et nous voulons inclure est statique. Encore une fois, ce n'est toujours pas suffisant. Tout ce qu'on a fait, c'est d'importer des trucs. Nous devons en fait l'ajouter à nos modèles d'URL. Donc, ce que nous pouvons dire ici est les modèles d'URL plus statique, et ensuite nous voulons que l'URL du média settings.js. Et la racine du document va être la route multimédia settings.js. Et ce que cela va faire est de dire, hey pour vos URL statiques pendant que vous exécutez sur localhost pas en production parce que vous ne voulez pas servir vos fichiers multimédias via Django en production, n'est pas sûr avant ce que nous faisons ici , c'est tout à fait correct. Nous allons dire connecter cette URL multimédia à cette route multimédia. Et revenons en arrière et jetons un coup d'oeil à ça. Alors. Média URL barre oblique. Donc, votre website.com barre oblique média. Avec cette route multimédia, ce dossier que nous allons finir par créer. Alors allons de l'avant et sauvegardons ça. Et revenons à Firefox. Et on peut la fermer. Nous allons juste rafraîchir la page. On dirait que rien n'a changé, mais si je recharge animé, enregistrer, continuer l'édition, il semble à nouveau que rien n'a changé, mais cette URL a maintenant changé. Cette URL. A apparaît et B dit, logos port 8 mille ces médias barre oblique profil animé. Il y a ces médias là-dedans. Et ces profils viennent, si nous allons aux modèles de profils venant de là. Et maintenant, nous pouvons réellement voir sur le côté gauche dans nos dossiers, nous avons des médias, puis des profils, puis animés, esquiver un sac. Maintenant, si nous faisons un état git, cela obtient le statut va nous montrer que nous pouvons ajouter des médias à notre dépôt et nous ne voulons pas cela. Donc nous voulons ouvrir notre gitignore. Et d'habitude, je jette juste au fond quelque part. Je viens de taper une barre oblique. Et puis si nous faisons un autre statut git ici, nous pouvons voir que les médias ne s'affichent pas. Donc, nous faisons git add git commit, et ensuite vous pouvez faire votre commit git régulier. Et cela ne va tout simplement pas engager l'année toutes vos images dans votre dépôt. Parce que si vous avez 20304050 personnes travaillant sur un référentiel et qu'elles ajoutent toutes leurs propres images de test. Ce repo va devenir vraiment, vraiment grand et vous allez télécharger leurs fichiers chaque fois que vous faites un git pull. Et c'est juste que ce n'est pas un endroit où tu veux vivre. Donc c'est vraiment tout ce qu'il y a à ça. Faisons un petit résumé rapide cependant. Pour ajouter son URL multimédia. Nous ajoutons une route multimédia et une URL immédiate. Ensuite, nous allons à nos URL point pi, nous importons statiques, nous importons des paramètres, puis nous disons des modèles d'URL plus statiques. Et puis nous connectons cette URL multimédia avec une racine de document, qui va pointer vers la route multimédia. 23. Ajouter des auteurs aux publications: Un taux à ce stade, nous avons maintenant des flux, des profils de médias, des modèles. On a toutes sortes de trucs ici. Allons de l'avant et ouvrons notre alimentation. Et ce que nous voulons faire, c'est que nous voulons donner un message et un auteur, car actuellement nous ne savons pas qui publie quoi que ce soit. Il peut être complètement anonyme à ce stade. Et peut-être qu'on ne veut pas ça. Peut-être que nous voulons que les gens puissent se suivre, comme sur Twitter, Instagram, quelque chose comme ça. Et donc ce qu'il nous faut ici, c'est une clé étrangère d'un auteur. Et donc nous pouvons faire l'auteur est égal à des modèles et point clé étrangère. Et cela va accepter l'utilisateur Django, que nous allons devoir importer dans une seconde. Supprimer est égal à deux modèles point cascade, ce qui signifie que lorsque nous supprimons, cet utilisateur, également supprimer leurs messages. Et puis si nous revenons au sommet, nous pourrions faire à partir de Django.com, trip dot auth, dot models, import user. Je pense que c'est génial. J' ai du mal à me souvenir de celui-ci aussi, mais je suis sûr que ce sont les modèles de voyage Django.com dot-dot-dot. Ça, je l'ai sauvé dans Django, redémarré et il n'y avait aucun problème. Donc, probablement, c'est tout ce qu'il nous fallait faire. Alors allons de l'avant et faisons des migrations. Et la raison pour laquelle nous faisons des migrations est que nous avons ajouté un champ auteur à notre post. Nous avons ajouté n'importe quel champ à notre modèle, nous devons faire la migration. Maintenant, cela va dire, voulons-nous quitter et donner une valeur par défaut ? Donc, tous les messages seront par défaut à un utilisateur particulier, ou est-ce que je veux dire fournir une valeur par défaut unique maintenant ? Et, tu sais, peut-être qu'on le change manuellement. Je vais dire qu'on va en fournir un maintenant et qu'on peut changer manuellement. Et je vais juste dire que chaque post vient de l'ID d'utilisateur numéro un. Et nous pouvons faire face aux répercussions de cela en un instant. Allons-y et fermons ça. Et regardons nos messages. Oh, pas une telle colonne qui a vraiment beaucoup de sens parce que nous avons fait cette migration, mais nous ne l'avons pas encore fait. On y va. Voyons voir. Notre premier message a été l'auteur Caleb. Et donc quand j'en ai tapé un, tout ce qui a été fait était de trouver le premier utilisateur. Où sont mes utilisateurs ? J' ai donc ces utilisateurs ici. Et en haut, vous pouvez voir l'ID utilisateur, un dans cette URL. Et c'est de là que j'ai eu celle-là. Si nous voulions que tous les utilisateurs soient notre utilisateur de test ou que tous les messages soient rédigés par notre utilisateur de test, plutôt, nous dirions numéro deux. Et maintenant, lorsque nous ajoutons un message, nous pouvons sélectionner un auteur. Il va être un utilisateur de notre application. Et nous pouvons lui donner un texte. Et actuellement, tous nos messages sont de moi. 24. Ajouter des données d'auteur aux modèles: D' accord, allons de l'avant et ajoutons notre image d'auteur et notre nom à chaque post. Donc, si nous revenons à notre application ici sur notre page d'accueil et actualisons, nous n'avons rien fait avec le modèle et tout est juste le truc par défaut que nous trouvons ici. Alors, allons de l'avant et changeons cette image, et changeons ce nom aussi. Alors allons-y et ouvrons notre page d'accueil. Et ici, parce que nous voulons utiliser notre vignette, je vis bibliothèque de vignettes ou paquet de vignettes. Nous devons charger cela dans ce modèle. Et cela dit juste à Django, hey, nous allons utiliser un paquet appelé thumbnail ou plutôt charger un fichier appelé thumbnail. Et il nous permet d'utiliser toutes les fonctions à l'intérieur d'un fichier ou d'un module appelé vignette. Et pour que nous puissions le faire. C' est là qu'on est là ? Où sommes-nous ici ? Nous devons remplacer cette image et ce nom. Maintenant, nous n'avons pas d'auteur, donc nous pouvons remplacer ce nom tout de suite. Chaque message a un auteur et chaque auteur a un nom d'utilisateur. Alors faisons cette connexion tout de suite. Chaque publication a un auteur qui crée un objet utilisateur. Et quand nous sommes dans notre administrateur et que nous regardons les utilisateurs, chaque utilisateur a un nom d'utilisateur juste là. Alors allons de l'avant et ok, regarde ça. Chaque poste a maintenant fait par moi. Donc c'est juste. C' est vrai. faire des messages plus tard avec différents utilisateurs juste pour démo pour le démontrer. Allons de l'avant et changeons cette image. Maintenant, cette image va être un peu plus difficile parce que nous utilisons un paquet tiers. Donc, ce que nous pouvons faire, c'est revenir sur ce paquet de tiers. Et comment utilisons-nous cela dans notre modèle ? Nous chargeons la vignette. C'est de là que j'ai eu ça. Et puis l'utilisation simple est juste ici. Et nous utilisons une balise de modèle appelée vignette. Nous lui donnons l'URL ou l'objet de l'image, la taille de l'image, le type de recadrage que nous voulons. Et puis nous le définissons comme un nom de variable. Et puis à l'intérieur de notre image, nous pouvons définir cette URL de l'image, cette largeur de l'image, et cette image, Je pense que je l'ai dit définir cette URL de l'image, la hauteur et la largeur. On a juste besoin de l'avoir. Et c'est ce que cette personne qui va faire. Et puis nous disons n miniature juste pour que nous puissions arrêter d'utiliser cette variable de messagerie instantanée dans notre modèle. Donc en fait, ce que je vais faire, c'est que je vais littéralement copier ça et je vais le modifier. Maintenant. Où puis-je obtenir cette image de ly, obtenir cette image de notre auteur de post. Et si nous allons dans nos profils ici, nous allons voir que chaque auteur a un champ un-à-un, ou chaque utilisateur a un champ un-à-un et cet utilisateur a une image. Et donc ce que nous pouvons faire ici est au lieu de dire le nom d'utilisateur de poste auteur, nous pouvons dire le profil d'auteur de point de poste, croire que c'est ce que nous l'avons appelé. C' est un nom connexe ici, image de point de profil. Et qui relie notre nom d'utilisateur ou l'utilisateur régulier plutôt à notre profil en utilisant le nom associé appelé profil. Et puis nous donne accès à tout le reste à l'intérieur de ce modèle ici, y compris l'image. Et est-ce qu'on veut recadrer ça à 100 par 100 avec 373 ? Alors faisons la même chose ici. 373 par trois, 73, centrage, c'est bien. Et nous allons juste mettre ça en retrait. Et maintenant, nous devons changer cette URL pour que cette source, cette source d'image ne provienne plus d'une splash. Et la source de l'image va être I M point URL. Et j'ai eu ça d'ici. I m point URL. Allons-y et sauvegardons ça. Et voyons ce qui se passe. J' ai une faute de frappe ? Peut-être, peut-être pas. Aha, regarde, je suis là. C' est moi. m'a animé. Maintenant, allons de l'avant et ajouter un post de plus et entendre quelqu'un d'autre pour que nous sachions que ce n'est pas toujours moi là-dedans. Allons de l'avant et créons un nouveau post. Une note. Pourtant, ajoutons un post. C' est ce qu'on veut. Ceci provient d'un utilisateur de test. L' auteur va être testé. Sauver. Et allons dans nos profils. Et nous allons éditer notre utilisateur de test. Parce que cette image va être une image actuellement introuvable, pas utile. Changeons ça à cette photo de moi. Sauver. On y va. Donc, il fonctionne en fait. Maintenant, cela n'est pas lié à une vue de profil. Il ne s'agit pas d'un lien vers une vue en lecture plus ou une vue dédiée. On va commencer sur ça très bientôt. Mais pour l'instant, nous avons juste besoin de mettre cette image et ce nom en marche. 25. Vue de détail: D' accord, allons de l'avant et ajouter une vue détaillée de post et un lien. Nous avons ces choses à faire En fait, celui-ci peut être nettoyé de la dernière vidéo. Oh, non, c'est non, c'est toujours assez correct. Nous avons encore besoin d'avoir cette URL là-dedans. Donc, ajoutez l'URL ci-dessous. Alors fermons ça et ouvrons peut-être. Allons aux URL de flux. Et nous avons déjà une URL de page d'accueil ici, et allons de l'avant et définissons une nouvelle URL. Et donc ce que nous pouvons faire est de copier ça et wow, nous n'avons pas eu à copier ça. Ne copions pas cela sur le chemin. Je vais dire int, et ça va être un PK. Je vais décrire ce que c'est en une seconde avec une barre oblique. C' est ce que cela va être, fondamentalement notre URL, donc notre slash website.com, puis un post vues point point point vue de détail comme vue. On n'a pas encore créé ça, mais on le fera, et on va lui donner un nom de détail. Vue si détaillée. Maintenant, la vue détaillée de la publication n'existe pas. Il faut que ça existe d'où ça vient ? Nos points de vue. Et il y a en fait une erreur de syntaxe juste là. On y va. C'est ce qu'on devrait dire. Nous devrions voir le module phi dot vues n'a pas d'attribut. Publier une vue détaillée. Allons de l'avant et ajoutons ça. Donc, nous pouvons faire la vue de détail de post de classe. Et cela va être une vue détaillée. Donc, nous devons aller et importer cela à la vue détaillée très haut qui vient de nos vues Django génériques. Allons de l'avant et disons que les noms de méthode HTTP sont égaux à une liste et ne deviennent que disponibles. Cela peut être la valeur par défaut, mais j'aime définir que de toute façon, le nom du modèle va être le point de détail de la barre oblique HTML. C' est là que ça va vivre. Et nous disons nourrir, parce que cela vient d'ici, des espaces de noms. Donc, si nous avions 20 autres applications, peut-être que nous ajoutons des flux et des flux. Au pluriel, il serait important d'espace de noms o. Donc, si nous avions un tel détail et des flux slash détail, nous pourrions dire pieds ou flux slash détail. Et puis juste une sorte d'espaces de noms sont des modèles pour nous parce que Django va chercher un template partout et vous ne savez jamais lequel va trouver le premier. En fait, ce n'est pas vrai. Vous le saurez probablement à un. Il trouvera d'abord quand il montre le mauvais. Et tu ne veux pas tomber dans ce genre de confusion. Le modèle va être un modèle post. Et le nom de l'objet de contexte par défaut, je crois que c'est généralement un objet, mais j'aime changer cela pour être le nom de mon modèle. Ça va être des messages. Donc, dans le modèle, je peux juste écrire post. Non, poste. Maintenant, revenons à notre page d'accueil et ajoutons un lien vers cette URL détaillée ici. Alors ce lien, d'où ça va venir ? Donc, nous disons ouvrir notre URL de syntaxe, détail de flux, puis nous lui donnons un ID afin que post.all. Et revenons vite sur ce que je viens de faire là-bas. Donc, pour chaque poste, dans les messages, si je vais dans les modèles, nous savons qu'il y a un ID et nous pouvons voir cet ID si nous allons dans nos migrations initiales, chaque modèle a un ID. Chaque modèle a un ID par défaut. Et c'est de là que nous obtenons cette carte d'identité. A l'occasion, vous verrez au lieu d'ID, vous verrez les lettres pk, clé primaire. À Django. C' est la même chose. Donc, le flux est notre application, et cela vient de nos URL d'espace de noms. Et puis détaille ce que nous venons d'écrire dans nos URL. Donc, c'est la partie détail, c'est la partie d'alimentation, la perle de détail. Pour aller de l'avant et sauver ça. Et quand nous actualisons notre pitch, nous devrions voir que cela va maintenant à une URL et cela ira à barre oblique pour la publication numéro quatre. Et c'est tout ce qu'il y a à ça. Nous avons juste à ajouter notre modèle à cela. Et donc nous avons réellement ce lien qui fonctionne. Maintenant, si je retourne en arrière et que je clique sur celui qui précède, cela ira à trois et reviendra à celui qui précède cela, il ira à deux. 26. Modèle de détail: D' accord, allons de l'avant et ajoutons une vue détaillée à chaque post. Donc, nous avons dit que le nom du modèle doit être la barre oblique de flux index.html. Alors allons de l'avant et ajouter détail point HTML dans nos modèles ici. Donc, nourrir, modèles, nourrir. Ajoutons un nouveau fichier ici appelé layout.html détaillé. Et faisons juste ce test. Faisons en sorte que cela fonctionne avant d'aller trop loin dans cela. Et ça marche. Donc maintenant, nous savons que nous voulons étendre à partir de notre fichier HTML point de base afin que nous ayons tous nos goodies là-dedans. Dans ce fichier HTML point de base. On a un corps et un bloc de titre. Donc nous voulons ce bloc de titre ici. Allons-y et copions ça. Et pour changer ce titre pour être, ne faisons rien encore de fou. Faisons juste un titre personnalisé juste pour nous assurer que cela fonctionne. Nous pouvons également ajouter du corps de bloc, plus de choses ici. Et ce n'est pas étendre est étend. Si vous criez et criez San Kayla, vous avez mal fait. Ok, on y va. Et le titre dit un titre personnalisé. Ok, allons de l'avant et changer notre titre personnalisé pour être notre post entier, post dot text by post dot author dot name dot. Et ce sera un titre assez long. Si votre message est comme 240 caractères, ce sera un titre super long. Comment cela aurait, c'est un deuxième post de Caleb, Cuckoo. Coucou. C' est là qu'on regarde, on y retourne. Ceci provient d'un utilisateur de test par test. Plus de trucs ici ne montrent rien. Mais ce qu'on pourrait faire, c'est dire un texte post-doc. Et ça montre notre, notre petit message. Et c'est maintenant en mouvement. C' est un deuxième post. C' est le deuxième post de notre ListView à notre vue détaillée. Et si vous vous demandez d'où je l'ai obtenu, dans notre vue détaillée de post, j'ai modélisé comme égal à post. Et le nom de l'objet de contexte est égal à post. Et c'est pourquoi nous sommes capables d'utiliser du texte postdoc post-tenure, il n'est pas objet et 0.2x, qui est ce que ce serait par défaut, c'est du texte postdoc. Maintenant, allons-y et rendons ce look un peu plus agréable. J' ai donc déjà un composant aligné, un que je voudrais utiliser. C' est celui-là. Ce que je peux faire est simplement copier ce code. Et nous allons coller ce code ici. Et nous avons besoin d'un rencard. Et ça va être une date post-doc. Nous n'utilisons pas de catégories, nous n'utilisons pas de titres et nous voulons simplement envoyer des SMS ici. Alors allons de l'avant et modifions ceci pour être notre texte post point. Jetons un coup d'oeil. Et à quoi cela ressemble jusqu'à présent. Il y a trop d'accolades. Nous ne lisons pas plus, nous n'avons pas besoin de ça là-dedans, lisons plus et débarrassez-vous de ça. Et fondamentalement ce que nous faisons ici comme à ce stade, nous prenons tout ici depuis notre page d'accueil et nous allons juste le copier. Et en fait, on peut faire tout ça. Donc, au lieu de faire le long chemin et de tout faire manuellement, ce que nous pouvons faire est de venir ici, coller à partir de notre page d'accueil. Et il est dit étiquette de bloc non valide sur la ligne 22, vignette. Et c'est parce qu'on n'a pas chargé ça. Nous devons charger en miniature. Chargez donc la vignette. Maintenant ha, et ça a l'air assez bien. Maintenant, nous avons ce problème où nous avons un lien Read More et nous sommes déjà sur la vue détaillée. Donc, cela va juste se lier à lui-même. Donc ce n'est pas bon. Comment on se débarrasse de ça ? Eh bien, ce que nous pouvons faire est que nous pouvons déplacer cela dans son propre modèle pour inclure et lui donner une variable personnalisée pour dire si quelque chose apparaît ou si quelque chose ne devrait pas apparaître ? Et dans notre prochaine leçon, nous allons parler de la balise de template include. 27. Inclusions des étiquettes: Ok, allons de l'avant et ajoutons une balise include. Donc ce que je dis ici, c'est que je vais juste déplacer ça à un endroit où je peux évaluer inclure. Et l'idée ici est que nous pouvons écrire du code similaire ou le même code plus d'une fois dans, ou plutôt juste une fois dans un endroit et inclus dans plus d'un endroit. Et donc nous avons ce code ici dans notre vue détaillée. Et c'est identique à ce qui est dans notre page d'accueil ici, le même code. Et donc ce que nous pouvons faire ici, c'est que nous pouvons fondamentalement couper ce code et nous pouvons aller dans un endroit où il va chercher des modèles. Et il va chercher des modèles dans les modèles TIL. Allons de l'avant et créons un nouveau fichier. Je vais lui donner un dossier appelé comprend d'abord. Et je vais l'appeler post.html. Et je vais simplement coller tout ça ici. Et sur notre page d'accueil au lieu d'écrire tous ces trucs, ce que nous pouvons évaluer à la place est include, includes, C'est le dossier que je l'ai mis dans, post.html avec certains contextes. Donc, ce point va être un poste. Et donc pour chaque poste sur la droite ici, c'est celui-là. Nous allons aussi le jeter dans ce post.html avec le nom du post, qui va juste nous permettre d'écrire ce postdate, poster des textes. Toutes ces bonnes choses. Alors allons-y et sauvegardons ça. Et voyons si j'ai des erreurs ici sur la page d'accueil. Allons à la page d'accueil. Oh, regarde ça. Je n'ai pas chargé de vignette. Donc, sur notre page d'accueil, nous avons une vignette qui n'est pas nécessaire car elle n'est pas utilisée dans ce fichier. Si nous allons dans notre post.html, nous pouvons simplement copier et coller cela là et couper et coller cela dedans. Et ça va marcher pour nous. Et la raison en est que cette miniature est réellement utilisée dans cette page d'accueil de fichier. Il n'est pas utilisé dans ce fichier. Alors allons-y. Et en passant, c'était à l'intérieur de la boucle for sur notre vue détaillée. Allons-y. Et dans notre corps, il suffit de le coller là aussi. Nous allons dire inclure, inclut slash post.html avec post est égal à post. Et nous n'avons pas besoin de la vignette car les vignettes ne sont plus utilisées dans ce fichier, elles ne sont utilisées que dans post.html. Alors sauvegardons tout cela et actualisons. Et allons-y. Et on dirait que c'est filtrant, ce qui est assez proche. C' est ce que nous voulons. Que se passe-t-il si nous ne voulons pas que ça en lise plus ici ? Nous sommes déjà sur la vue détaillée. Nous n'avons pas besoin de relier à cette vue détaillée. Allons de l'avant et ajoutons une nouvelle variable de contexte ici. Afficher les détails. Le lien est égal à true. Et je vais juste copier ça, ce nom. Et dans mon post.html, je vais mettre une lecture plus ici. Donc, si ce n'est pas une lecture plus, comment est la lecture ? En savoir plus ? Et en essayant de faire trop de choses à la fois là-bas. Pas de vue détaillée. Et ça ne me dérange pas qu'il y ait une faute de frappe là-dedans. Je vais arranger ça dans un peu. Et donc ce que nous disons ici est quand vous incluez post.html, également mettre en post et montrer le lien de détail à l'intérieur de ce fichier. Et donc si le lien Afficher les détails existe et qu'il est vrai, nous pouvons montrer ce lien Read More. Sinon, il va dire pas de vue détaillée. Sur notre vue détaillée. Il n'y a pas de vue détaillée et c'est parce que nous n'avons pas mis ça là-dedans. C' est notre vue détaillée, c'est notre page d'accueil. Cependant, si nous allons sur notre page d'accueil, ce lien apparaît toujours. Et c'est exactement ce que nous voulons. Maintenant, nous n'avons pas besoin qu'aucun texte de vue détaillée là-dedans. Donc, nous allons cliquer sur ceci et cela bouge tout. Alors peut-être qu'on veut un petit quelque chose là-dedans. Allons, ajoutons juste une travée. Et nbsp, juste une force ce texte là-bas. Et c'est juste parce que nous utilisons flex et qu'il est justifié entre. Nous avons donc besoin d'au moins deux articles ici. Soit l'élément en lecture plus ou la plage vide plus un div pour tout cela. Maintenant, ce qui est bien à ce sujet, c'est quand nous faisons cela à cette inclusion, quand nous écrivons une inclusion, nous n'avons pas besoin de passer par plusieurs fichiers et de changer cette URL plus tard. Nous pouvons juste passer par le fichier post.html, changer à la fois. Et ça va changer pour nous à plusieurs endroits. Donc, actuellement, ce lien va absolument nulle part. Et sur la page d'accueil, ce lien ne va nulle part. Mais une fois que nous avons changé ça parce qu'ils pointent tous les deux vers le même fichier. Le détail comprend post.html et les pages d'accueil, y compris post.html. Il suffit de changer le contenu ou les URL ou la structure sur post.html. 28. Publier des éléments de CreateView: Allons de l'avant et créons une nouvelle vue de création pour créer des messages, car en ce moment, nous ne pouvons créer des messages que par l'intermédiaire de l'administrateur. Donc, ce truc ici, lier à une vue de profil reviendra à cela dans un peu. C' est pour ça qu'on a écrit un todo ici. Alors fermons tous les trucs de notre dernière leçon. Et quand nous créons une nouvelle vue, ce que nous voulons faire est d'aller à nos URL et nous voulons juste écrire quelque chose de nouveau ici. Alors écrivons, eh bien, tout d' abord, donnons une virgule à la fin là. Chemin. Nouveau avec la barre oblique. Allons ajouter des vues. Créer un nouveau Post.all comme vue. Et le nom va être, je suppose un nouveau poste. Maintenant, ça n'existe pas. Dans Django se plaint à ce sujet. Donc, nous avons besoin d'aller et de créer une nouvelle vue de nouveaux messages à l'intérieur de notre vue est la classe de fichier. Créer une nouvelle publication. Nous ne savons pas encore quel genre de modèle ce sera. Nous devons créer quelque chose. Nous en avons besoin. C' est littéralement juste dans le nom. Nous devons créer le poste. Donc, nous allons utiliser une chose appelée une vue de création. Et d'où cela vient est de Django, dot, dot, dot, générique, dot, edit, import, create view. Et ça fait partie de nos opérations brutes, des opérations brutes. Donc maintenant, cette nouvelle création, créer de nouvelles publications vue doit avoir un modèle et il va créer une nouvelle publication. On va lui donner un nom de modèle. Et cela va être flux élégant crée point HTML, qui, en passant, si vous ne savez pas ce qui vient sur une vue de création, vous pouvez toujours aller à CC BY VSCO WK. Et cela vous montrera des vues classe classe classe pour Django. Et ça va littéralement vous montrer tout ce que vous voulez voir. Vous voulez voir ce qu'a une vue de création, toutes les méthodes et propriétés qu'elle contient. Vous pouvez les voir tous là-bas. Et les champs que nous voulons ajouter dans votre, Eh bien, ouvrons notre note postmoderne. Il va à alimenter les modèles. Et la seule chose que nous voulons ajouter, c'est du texte. Nous voulons que l'auteur soit ajouté automatiquement afin que je ne puisse pas créer de publication en votre nom. Allons donc de l'avant et disons que le seul domaine dans ce domaine sera taxé. Et ça va être une liste. Maintenant, nous avons besoin de créer ce fichier HTML point crée. Et donc nous avons dit qu'il allait être dans le fichier HDF5 de flux dans notre modèle. Donc, nouveau fichier, modèle va être créer point HTML. Et allons-y et étend notre fichier HTML point de base. Et donnons-lui un bloc, un titre. Créez une nouvelle publication. Et donnons-lui un bloc de corps. Et ici, nous pouvons dire point de forme comme P. Et cela va mettre tous nos éléments de formulaire dans les balises de paragraphe. Maintenant c'est sympa et tout, mais il n'y a pas de lien ici pour en créer un. Alors créons un nouveau lien ici. Alors ouvrons notre page d'accueil. Non, ouvrons notre point de base HTML et il est déjà plié. Donc, disons que si l'utilisateur est authentifié, il peut se déconnecter. Ainsi, ils peuvent également créer un nouveau poste. Alors copions ceci. Et on va dire New Post. D' où vient ce lien ? Ce lien provient du flux New Post. Nous devons donc l'ajouter là-dedans. Donc, nous tapons alimentation deux-points New Post. Et nous allons probablement vouloir changer cette icône. Mais pour l'instant, voyons si cela fonctionne. New Post va à nu. On a un texto là-dedans. Cela fonctionne maintenant, cela ne va pas réellement créer un nouveau poste en ce moment. Donc si tu veux tester ça et que ça ne marche pas, c'est normal, c'est prévu. Nous avons encore quelques choses à faire ici. Ce New Post cependant, allons de l'avant et modifions cette icône. Et alors d'où ça vient ? Ça vient de l'icône Box. Voyons donc ces icônes de boîte. Google est votre meilleur ami. Et chercher. Plus peut-être. Ajoutons le calque plus. Et donc nous cliquons dessus et il dit que le nom est la couche plus. Et c'est un composant Web. Le HTML droit, c'est plutôt cool. Je ne savais pas qu'on pouvait faire ça en tant que police. Nous voulons Bx, Bx couche plus. Maintenant semble un peu différent de ce que je l'ai fait. Où sommes-nous ? Où sommes-nous ? Où sommes-nous ? Bx, déconnexion Bx. Nous voulons une couche plus. On y va. Maintenant, nous pouvons aller à notre nouvelle vue de post. Maintenant, nous avons un problème avec ça. Le problème est que tout le monde peut venir ici et essentiellement essayé de créer un nouveau poste. Maintenant, il n'est pas branché, donc ça ne va pas marcher. Mais n'importe qui peut entrer. Copions ceci et ouvrons une nouvelle fenêtre Incognito ou de navigation privée. Et cela fonctionne pour moi tant que je ne suis pas connecté. Et donc nous devons forcer l'utilisateur à être connecté. Nous pouvons le faire assez facilement. Je vais te montrer comment faire ça dans la prochaine leçon. 29. Forcer l'authentication: D' accord, regardons comment nous pouvons forcer l'utilisateur à se connecter. Parce qu'à l'heure actuelle, un utilisateur n'a pas besoin d'être connecté pour tenter de créer une publication. Et on ne veut pas ça. Nous voulons qu'ils soient toujours connectés. Allons-y et ouvrons notre éditeur et fermons tout. Et je vais vous montrer la façon la plus simple de le faire. Et nous allons entrer dans notre point de vue et nous allons importer ce qu'on appelle un mixin. Donc de Django dot contrib, nope, dot auth, dot mixins. Maintenant, nous allons savoir si c'est faux. Django va se plaindre assez fort. C' est faux. Faites une connexion, nécessaire, mélangez. Voyons si c'est juste. Sauvegardons ça et voyons ce que Django dit. Maintenant. Ok, ça doit être lu. Donc, que la connexion requise mixin. Nous pouvons maintenant mettre sur notre vue de création et hériter deux classes à la fois. Et donc ce que cela va faire est de dire, hé, si l'utilisateur n'est pas connecté, virez-le dehors. Sinon, si cet utilisateur est connecté en effectuant des tâches de création de vue irrégulières. Et donc je suis actuellement connecté ici. Ça va marcher. Et quand j'ai ouvert une navigation privée, je ne suis pas connecté. Donc, cela n'a pas fonctionné pour moi et m'a viré et m'a amené à la page de connexion et a dit que la prochaine sera la nouvelle URL. Alors maintenant, je peux me connecter ici. Et puis il m'amène à la nouvelle page de poste. 30. Créer un nouveau poste: Ok, nous allons travailler un peu avec notre vue de formulaire ici. Donc vue de forme intérieure, pas notre point de vue. Peut-être travaillons-nous d'abord avec notre modèle. Ça va être un peu plus drôle, je crois. Donc, entrez le modèle. Nous avons ce formulaire ici. Et bien que ce soit bien, et il semble qu'il fasse ce qu'on veut qu'il fasse. Si je clique avec le bouton droit de la souris et inspecte votre va voir que c'est juste un paragraphe, il y a un div, un paragraphe , une étiquette et une entrée. Et je veux dire, même si c'est bon, on n'a pas de formulaire. Alors, comment soumettons-nous cela ? Comment soumettrons-nous cela ? Ça ne marche pas. Je peux appuyer sur Entrée autant de fois que je le veux, et cela ne va tout simplement pas fonctionner. Donc, nous devons envelopper ceci sous une forme. Alors faisons exactement ça. Et faisons la forme. La méthode est égale à l'action de post va être sa propre page. Donc, quelle que soit la page, quelle que soit l'URL que cela vient, nous voulions simplement poster sur lui-même. Ensuite, nous avons besoin d'une sorte de boutons de soumission. Alors allons de l'avant et ajoutons un div ici. Et donc je veux ajouter un joli bouton et avoir déjà un composant aligné pour cela. C' est bien celle-là. Je voulais ce bouton Envoyer, je veux ce joli bouton là-dedans. Allons de l'avant et copions tout le code. Copions l'envoi. C' est le premier là-bas. Et j'ai juste collé ça là-dedans. Et voyons à quoi ça ressemble au début. Ok, envoyez pas mal, pas mal. Pourquoi est-ce que je rembourse un peu là-bas ? Et le bouton est bizarre. Oh, il y a de la marge tout autour. Disons que la marge x sera 0, la marge y sera trois. Et cela pour les lignes un peu mieux. Je suppose qu'on peut toujours rendre ça meilleur, beaucoup plus facile. Donc, au lieu de dire envoyer, disons créer un post. Et ce bouton, son type va être Soumettre. Maintenant, lorsque vous soumettez un formulaire dans Django, vous allez voir une vérification CSRF, demandes échouées, un embarqué. Et donc chaque fois que vous voyez cela, ce dont vous avez besoin ici est un jeton CSF, CSRF, C, S, R, F jeton de soulignement. Donc maintenant, quand nous allons de l'avant et actualisons et testons cela, au moins nous obtenons une erreur différente à ce stade est de dire pas null, contrainte, échec. L' ID de l'auteur de la publication doit être rempli. Et c'est parce qu'on va nourrir les modèles. Notre auteur n'est pas placé à l'intérieur de notre formulaire. Et donc si nous revenons à notre vue de création, nous avons dit que les champs, c'est juste du texte, pas l'auteur. Si nous ajoutons l'auteur, cela pourrait sembler un peu différent. Nous pouvons maintenant sélectionner qui il a posté, qui n'est pas ce que vous voulez quand vous êtes sur Twitter, vous ne voulez pas être en mesure de sélectionner parmi 340 millions d'autres utilisateurs ou autant d'utilisateurs qu'ils veulent. Une très longue liste. De plus, vous ne voulez pas pouvoir poster au nom de quelqu'un d'autre. Vous voulez que ce soit un peu plus sûr que ça. Donc on ne met pas ça là-dedans. Mais il se plaint que ce n'est pas là dedans. Donc, ce que nous devons faire ici, c'est que nous devons dire la forme def valide. Lorsque ce formulaire est valide, il prend un moi et la forme elle-même. Et à la toute fin, peu importe ce que nous faisons, nous devons retourner la forme de points super, valide sans forme. Et ici, allons-y et attrapons ce formulaire. Appelons simplement l'objet cependant. Donc, form, dot save and commit va être faux, ce qui signifie que nous ne allons tout simplement pas enregistrer ceci encore. On va juste prendre le formulaire et tous les détails se sont terminés, mais on ne le sauvera pas encore. Ensuite, nous pouvons faire l'objet est égal à un objet. Auteur est un, est égal à la demande. Cet utilisateur, nous n'avons pas de demandes et nous allons devoir l'ajouter en une seconde. Et puis nous pouvons faire OBJ dot save. D' où viennent les demandes ? Si tu essayes ça, tu auras une erreur. Donc, nous devons lancer ça dans l'expédition. Donc nous faisons l'envoi de sourds. Auto-demande, args et quarks sont des œufs. Et les quarks. Retourne l'expédition super point, requête, args et quarks. Et vous remarquez comment nous avons demandé ici. Eh bien, c'est une classe, donc nous pouvons faire self.age requête est égale à la demande. Et ici, nous pouvons y accéder avec self.age demande. Et l'expédition sera toujours exécutée avant que des fonctions comme formulaire valide. Voyons ce genre d'erreurs que nous avons ici, juste là ne devrait pas avoir de deux-points. Et ça semble marcher. Ok, une autre chose que nous devons faire est sur une vue de création, nous avons besoin d'une URL de succès. Alors que se passe-t-il lorsque le formulaire est soumis avec succès ? Nous pouvons dire que l'URL de succès sera juste notre page d'accueil. Ou nous pourrions l'inverser pour être notre page d'accueil en utilisant Django, inversant les URL et en gros dire, toujours revenir à notre page d'index, mais notre page d'index va toujours être codée en dur pour être la même. Dans ce cas particulier, ce sera toujours le même. Ou les pages d'accueil toujours, toujours, va toujours être juste une barre oblique. Alors allons de l'avant et essayons ça. Tester le post numéro un, créer un post. Et voilà, test post numéro un. Et je peux aller ici, a posté le numéro un qui travaille pour moi. Nous sommes maintenant en mesure de créer de nouveaux postes. 31. Mode de Tailwind CSS: Très bien, ajoutons un modal de vent arrière pour que nous puissions démarrer Ajax et de nouveaux messages sur la page. Maintenant, j'ai déjà un choisi et je viens de l'obtenir de tailwind components.com. Ils ont beaucoup de grands composants ici. Et c'est le modal que je veux utiliser. Et un modal est juste une petite boîte de dialogue pop-up en face de tout votre autre contenu qui dit, hey, êtes-vous d'accord avec l'utilisateur de cookies ? Tu veux confirmer ou refuser de faire ça ? Et donc je vais littéralement copier ce code. Et je vais fermer ces fichiers et aller au point de base HTML. Et dans ma base au HTML tout en bas. Bon, je vais juste coller tout ce code ici. Et je ne sais même pas à quoi ressemble ce code. Alors peut-être qu'il fait trop sombre. Donc, nous voulons vraiment que ce contexte soit un peu transparent ici. Et donc, dans le domaine du vent arrière, nous pouvons le faire. Donc on a BG gris 800. Nous pouvons également faire l'opacité BG 90. Et ça rend un peu plus visible. Et si on voulait faire le lac ? On peut en faire 75 ? Oui, on peut en faire 75. Tenons-en à 75. Ça a l'air plutôt bien. On n'aura pas de titre modal, est-ce pas ? Oui, peut-être que nous le ferons. Nouveau poste. Maintenant, pas la page New Post. Et le texte qui va être ici va être une sorte de forme. Donc nous allons mettre un truc à faire ici pour ajouter le formulaire Ajax. Et on peut garder les boutons Fermer là-dedans. Rafraîchissons ce nouveau post. Aujourd'hui va être là-dedans. Changeons cela de Accepter pour créer un message. Et en fait, passons à notre, notre vue de création. Et prenons ce bouton parce que j'aime vraiment ce bouton. Et mettons-le à côté d'elle. Voyons ce qu'il faut changer ici. Donc je viens de copier et de coller ça. Cool, ça s'est bien passé. Allons de l'avant et corrigeons ce retrait. Supprimez celui-là, et supprimez celui qui est proche parce que nous n'avons pas X ici, nous n'avons pas besoin de cette proximité. Donc, là, nous allons créer des messages et une clôture. Créons un post. On peut faire quelque chose d'un peu plus petit ici ? Pouvons-nous faire des SMS SM ? Oui, ça fait un peu plus petit rembourrage. Y va être un rembourrage, x va être trois sources et en faire un bouton plus petit que nous allons créer post. Et peut-être ajoutons une marge au sommet ici. Et encore une fois, c'est juste un vent arrière régulier. Donc, si vous n'êtes pas sûr de ce que l' un de ces font, un, vous pouvez juste les lire, ce qui est vraiment beau vent arrière comme une première bibliothèque utilitaire. Et la documentation est en fait assez bonne. Et donc nous pouvons faire la marge en haut, et faisons la marge en haut de C4. Fait n'importe quoi. On y va, petite marge en haut. Créer des publications. Maintenant, ça ne va rien faire. Et je pense que ce que j'aimerais que nous fassions, c'est que cela soit mis place pour le succès et dans les prochaines leçons. Donc, tout d'abord, js modal est ce que je vais appeler ceci. Et je veux aussi que cela soit caché par défaut. Et ce bouton, ce bouton de soumission bien que nous voulons travailler avec ici. Changeons cela de Soumettre au bouton parce que nous allons utiliser JavaScript pour cela. Cela va être appelé JS soumettre. Et rien n'apparaît, c'est complètement caché. On a encore une chose à faire ici. Si un utilisateur n'est pas connecté, ce composant ne doit pas s'afficher. Donc, nous pouvons dire que si la requête dot user_data est un non ne miss, nous pouvons attraper tout ce code hors dent. Et si, et on dirait toujours que rien ne s'est passé. Mais l'idée ici est que ce modal ne devrait pas apparaître. En fait, faisons une petite démonstration ici. Où ai-je mis caché ? Caché a été appelé caché à. Ce n'est pas un nom de classe. Et ça ne se montre pas. Et c'est pour ça que nous testons les choses. Parce que j'ai dit que si la demande de cet utilisateur est anonyme, nous pouvons dire si la demande de cet utilisateur est authentifié, ce que j'allais faire à l'origine est dire, sinon anonyme, mais nous pourrions faire la même chose pour quelque chose le contraire. Ou nous pouvons dire si la demande que l'utilisateur est authentifié, alors montrez-le. C' est là. Et disons-le. Fait. Et c'est tout ce qu'on va faire pour cette leçon. Nous voulions juste ajouter un bon modal de vent arrière afin que nous puissions commencer à y ajouter des choses un peu plus tard. 32. Permettre des fichiers statiques: Ok, maintenant avant de continuer, nous devons ajouter des fichiers statiques et des dossiers à notre application. Alors allons-y et fermons ça. Et nous allons vouloir ouvrir nos paramètres dot py. Donc quelque part ici, je vais juste jeter ça au fond. Nous voulons des fichiers statiques et voyons cela tous les fichiers statiques majuscules. Les répertoires sont égaux à une liste. Et nous allons dire OS point, point rejoindre notre répertoire de projet, que nous avons mis en place dans une leçon beaucoup plus tôt. Et on va l'appeler « front end ». Ensuite, nous allons ajouter une route statique, pas un statut, mais une route statique est égale à OS et point, point jointure. Et puis nous voulons joindre ce répertoire de base avec statique. Et enfin, nous voulons notre URL statique et mettons cela sur une nouvelle ligne. Est URL statique va être barre oblique statique, qui ressemble beaucoup à notre URL média. C' est là que nos actifs statiques vont être construits. Maintenant, un actif statique est comme votre propre fichier JS ou votre propre fichier CSS à l'intérieur de votre propre application. On n'a pas couvert ça dans Django 101. Maintenant, allons de l'avant et créons un nouveau fichier ici. Et on va d'abord créer un tas de dossiers. Donc, le premier dossier va être frontal, et cela correspond à ce que nous avons écrit sur la ligne 156. Et puis un sous-dossier appelé JS, puis un fichier appelé main.js. Et nous allons simplement dire console.log, bonjour monde avec le cœur. Et puis dans notre point de base HTML, ce que nous pouvons faire est en haut, nous pouvons dire charge statique. Et au tout, tout en bas, où nous voulons charger notre JavaScript statique, nous pourrions simplement dire que le script SRC est égal à la barre oblique js statique main.js. Et nous allons nous assurer que c'est une chaîne. Maintenant, allons dans notre page ici et allons dans la console. Donc, je viens de faire un clic droit, Inspecter l'élément, la console, rafraîchir et rien ne se passe. Donc, ce que nous voulons faire à ce stade, c'est que nous voulons taper Python managé dot py, collecter statique et regarder ce qu'il fait. Sur la gauche, ici va créer un dossier statique pour nous. Il y a notre dossier statique. Et donc notre dossier statique chaque fois que nous exécutons cette statique ici, et ce que nous devons faire est de fermer cela. Chaque fois que nous exécutons cette balise de modèle statique, cette fonction, il va ensuite regarder vers l'avant ce dossier, ce fichier. Et ça va aller ici, js, main.js. Et donc fondamentalement juste copié sur notre code à partir de notre dossier frontal dans un dossier statique. Alors allons de l'avant et rafraîchissons. Et ça dit bonjour monde, signe du cœur. Et moins de trois. Maintenant, on va de l'avant, peut-on faire ce qu'on veut à l'avant ? Bonjour, c'est le front end. En fait, on peut. Et donc toute la raison pour laquelle nous collectons statiques est que idéalement, nous ne voulons pas vraiment que tout notre code frontal soit exécuté. Nous voulons qu'il s'exécute à partir de notre dossier statique. Et c'est ainsi que nous faisons cela et nous utilisons cette commande de collecte statique pour collecter tous nos fichiers statiques de sorte que lorsque nous sommes en production, Django sait où trouver les choses. Nous pouvons dire, hey moteur X, au lieu d'utiliser Django ou nous pouvons dire hey moteur suivant, cherchez tous nos fichiers admin dans l'admin slash statique ou quelque chose dans ces lignes. Donc, en allant de l'avant, nous pouvons mettre tout notre code dans le front end slash js, slash main.js. Et quand vous allez déployer votre application à un moment donné dans le futur, chaque fois que vous êtes prêt, vous devez simplement vous assurer de taper Python managé dot py, collecter statique. Ou si tu ne veux pas, regarde ça. Ça va me demander des commentaires. Êtes-vous sûr de vouloir continuer ? Il va remplacer un tas de fichiers que je pourrais taper oui, ou je pourrais taper Python managé dot py collecte statique tiret, tiret , pas d'entrée de tiret. Et ça ne va pas demander, ça va juste le faire. Last but not least, nous devons le faire. Si nous faisons un statut git ici, nous allons voir quelque chose d'intéressant. Nous voulons valider notre code frontal, mais notre code statique a tous ces trucs d'administration dedans et il va y avoir beaucoup d'autres choses là-dedans ainsi que votre application grandit. Nous ne voulons pas valider notre dossier statique. Ce que nous voulons faire est d'ignorer ce dossier statique et ne jamais valider que les choses que nous avons modifiées dans notre dossier frontal. Alors ouvrons notre gitignore. Et en bas, où il est dit média, tapons statique. Faisons un état git une fois de plus. Et ça ne s'affiche plus. Et nous sommes prêts à y aller. Nous avons nos fichiers statiques en cours d'exécution. Donc maintenant, nous pouvons écrire notre JS dans un fichier dans notre projet et nous n'avons pas à tout écrire dans. Eh bien en interne. Ce que je veux dire par là, c'est que si vous n'êtes pas un développeur JavaScript, c'est que nous n'avons pas à écrire notre JavaScript ici. On n'est pas obligés de faire ça. Nous pouvons écrire tout notre JavaScript dans un fichier et ensuite nous pouvons appliquer la mise en cache à cela. Donc, c'est votre script, soit ne charge ou télécharge qu'une seule fois, ou est au moins vraiment, vraiment rapide à charger pour vos futurs utilisateurs de sites Web. 33. Ajouter du JavaScript: D' accord, allons-y et ajoutons jQuery. Donc, tout d'abord, allons juste sur le site jQuery dot est un jQuery.com. C'est JQuery.com. Téléchargez jQuery. Ou au lieu de faire cela, nous pourrions faire jQuery CDN, et nous sommes sur la version 3.5.1 en ce moment. Alors allons chercher la version la plus moderne. Il y a un CDN ici ? Maintenant, c'est le CDN, Google, Google, Google. Ok, donc on veut la version minifiée. Nous voulons plein. Alors je vais faire ça. En fait, non, ne faisons pas ça comme ça. Que font CDN JS. Et c'est agir, copions le tout. Copiez donc la balise de script. Et cela va nous donner 3.5.1 jQuery dot main.js. Donc il a déjà été minifié. Donc tous les espaces et toutes les choses ont été supprimés. Et jetons simplement cela devant notre main.js ou main.js peut alors exécuter n'importe quelle sorte de jQuery. Ensuite, pour les appels Ajax, nous avons un étrange que je ne vais pas traverser tout le truc. Et donc c'est à ça que ça ressemble avant de faire n'importe quelle sorte d'ajax. On va piéger notre Ajax. Et ce que ça va faire, c'est chercher où tu es, où es-tu, où es-tu ? Un jeton CSRF va définir ce cookie afin que nous n'ayons pas à le définir sur chaque requête Ajax. Maintenant, je recommande fortement de télécharger simplement le code source et de copier et de coller ceci et m' assurer que c'est avant votre main.js et vous pouvez même le jeter directement à l'intérieur de votre main.js. En fait, allons-y et faisons-le. Supprimons ça. Supprimez cela. Et allons à l'intérieur de notre main.js et jetons ça ici. Et l'idée ici encore est que rappelez-vous quand nous essayions de créer un nouveau post et nous avons eu cette erreur de jeton CSRF. Eh bien, avec ajax, nous ne savons pas forcément comment soumettre ça. Mais les jetons CSRF sont des cookies. Et donc nous pouvons définir un cookie, ou plutôt nous pouvons obtenir le cookie, alors nous pouvons définir l'en-tête de requête pour utiliser le jeton CSRF XSS afin qu'à l'avenir, lorsque nous faisons une requête ajax, nous n'avons pas nécessairement à appliquer un jeton CSRF aux requêtes Oliver Ajax. Maintenant, il y a beaucoup de choses ici, et ce n'est pas un module JavaScript. Django to1 n'est pas destiné à couvrir beaucoup de JavaScript, juste un peu. Mais si vous n'êtes pas familier avec cela, je recommande fortement de vérifier JavaScript, un à un en JavaScript via l'un de mes autres cours JavaScript. Alors revenons ici et nous allons juste nous assurer que les choses se chargent comme nous nous y attendons. Cool, on n'a pas de favicon, donc c'est très bien. Nous avons maintenant jQuery et installer, installé. Et ce que nous pouvons faire est d'inspecter avec le bouton droit de la souris, aller à la console. Et si on tape le signe du dollar, on devrait voir quelque chose là-dedans. On devrait pouvoir attraper tout ce qu'on veut. Donc on peut attraper tout notre corps et ça nous donne un objet. Et c'est comme ça que vous savez, jQuery est installé. Alternativement, vous pouvez toujours taper jQuery. Eh bien, assurez-vous que vous tapez réellement jQuery et que vous obtenez la même chose que ce signe de dollar. Une fois que vous avez installé jQuery. Passons à la leçon suivante. 34. Vous pouvez activer le modal en utilisant JavaScript: D' accord, jetons un coup d'oeil au basculement ou modal. Et il y a quelques leçons, nous avons créé un modal et nous devons essentiellement le faire apparaître. Comment on peut le faire apparaître ? Nous allons utiliser JavaScript pour cela. Donc, ce que nous pouvons faire, tout d'abord, est d'entrer dans notre, pas notre page d'accueil, mais sont basés sur HTML. Et où que disent les nouveaux messages, c'est un lien. Et donnons à cela une nouvelle classe de js toggle modal. Et ouvrons notre frontend jazz main.js. Et faisons simplement défiler vers le bas et créons un nouvel écouteur d'événement. Donc, document, point sur point cliquez ou non point cliquez, il suffit de cliquer sur point js, bascule modal. Fonction E. Pour l'événement e point éviter par défaut. Donc si c'est un lien, n'allez nulle part, ne faites rien. Et disons simplement console.log. Bonjour, on m'a cliqué. Maintenant, si vous n'êtes pas familier avec jQuery, vous pouvez toujours prendre ma classe jQuery 101 qui couvrira tout cela également. Mais pour le moment, je vais supposer que vous connaissez jQuery à ce stade, si vous ne connaissez pas jQuery, fondamentalement, vous avez fait ce projet. Il y a un peu plus que nous pouvons ajouter, vous pouvez sauter en avant où nous ajoutons une vue détaillée pour tous nos profils. Mais si vous ne connaissez pas jQuery, vous n'avez pas à vous soucier des choses Ajax. Donc certaines de ces leçons que vous pouvez simplement passer à travers. Allons-y et ouvrons notre console. Et chaque fois que je clique dessus, il dit que j'ai été cliqué Bonjour, j'ai été cliqué, clique dessus 11 fois. Je vais cliquer 11 fois de plus. Et continuez à dire que j'ai été cliqué pour que ça marche. Donc, ce que nous devons faire maintenant est que nous devons, dans notre modélisation ou le point de base HTML, nous avons JS modal et nous devons basculer cette classe cachée sur et hors. Donc, nous pouvons maintenant sélectionner cette classe modale bascule cachée. Et faisons ça. Voyons si ça marche. On y va. Ça marche. Et maintenant, nous devons comprendre comment fermer cela pour que SVG, nous devons le fermer avec ce SVG. Et nous pourrions appliquer la même chose ici, js bascule modal. Et parce que tout ce que nous disons ici est chaque fois qu'une classe appelée js toggle modal est cliquée, ce modal va activer et désactiver cette classe. Et parce que nous ne pouvons pas cliquer sur autre chose à l'extérieur d'ici, nous pouvons simplement cliquer sur ce x et maintenant il est assez en marche pour nous. 35. Ajaxing de nouveaux postes: Ok, allons de l'avant et commençons à créer des messages dynamiquement avec Ajax et jQuery. Donc, comme peu de référence, Ouvrons notre point de base HTML. Et dans notre modal, c'est notre modal ici, nous voulons ajouter ce formulaire Ajax. Et donc nous n'avons pas vraiment besoin d'ajouter un formulaire du tout parce que nous notons que c'est déjà JavaScript alimenté. Nous n'avons pas à nous assurer que ce n'est pas nécessairement JavaScript prêt, sorte que nous pouvons supposer en toute sécurité que tout le monde utilise JavaScript. Alors ajoutons une entrée ici. Avec non, pas aucune entrée. Faisons une classe de zone de texte. Bordure à frontière, bleu 500. Je crois que ça va faire ce que je veux. Et disons que les lignes vont être trois rangées. Et il va y avoir une marge là-dedans à la marge supérieure et inférieure de six pixels ne sont pas six pixels. Et ça va être pour REMS à REMS, je ne m'en souviens pas. Quoi qu'il en soit, va ajouter une marge supérieure et nous pouvons toujours changer que si nous n'aimons pas quatre, nous pouvons toujours utiliser huit ou 16 ou quelque chose comme ça. Zone de texte barre oblique. Et pour JavaScript, et pour pouvoir saisir cela, nous devons ajouter une classe de base JavaScript. J' aime préfixer mes cours avec du jazz. Donc JS, nouveau poste. Maintenant, je vais juste l'appeler Post. Et nous pouvons nous débarrasser de cette tâche. D' accord ? D'accord. On doit y ajouter un peu de Whitman. Donc avec plein et ça n'a pas fait ce que je veux. Donc, passons au type de doc CSS tailwind en largeur. Et c'est le W plein. Pourquoi ça n'a pas fonctionné pour moi ? W full pourrait être l'élément parent. On y va. Cool. Donc, nous avons une zone de texte et il y a aussi un espace réservé. Espace réservé. Entrez votre message. Ajoutons également un maxlength est égal à. Et combien de temps sont ces postes est censé être. Comme un flux maximum modèles 240 caractères. Donc on va dire que ça a une longueur maximale de 240 caractères. Alors maintenant ce qui se passe quand nous cliquons sur ce rien. Nous devons nous assurer que quelque chose se passe lorsque nous cliquons sur Créer une publication. Donc, lorsque nous cliquons sur créer un post, qui a une classe de JS soumettre dessus, nous pouvons travailler avec cela. On peut dire document point sur. Et je change tout ça ensemble. Cliquez sur dot js soumettre la fonction e, e point empêcher la valeur par défaut parce que je ne veux pas qu'il fasse quoi que ce soit sa chose naturelle sur le navigateur. Et disons simplement console.log. Soumettez-moi ouvert. Et il est là, se montre. Soumets-moi, cool. Donc maintenant, nous devons obtenir ce texte. Et avant de faire un ajax, nous devons le faire, nous devons obtenir les textes, OJS, les messages, c'est ce que nous voulons saisir. Vas-y et prends ce texto. Const. Le texte est égal à cet élément point texte, note pas point txt, c'est dot val. Et coulons-le aussi. Ensuite, nous pouvons dire, s'il n'y a rien là-dedans, s'il n'y a pas de longueur de point de texte, s'il n'y a pas de poste, il suffit de retourner faux. Sinon, attrapons ce modal et disons-le. Donc je vais attraper ça et le cacher. Ajouter une classe cachée. Et cela va juste confirmer que cela va vraiment marcher pour moi. Donc rien ne se passe. Quand j'ajoute du texte ici. Ça se ferme pour moi. Cool. Mais maintenant, quand je l'ouvre, le cylindre Texas, donc on doit l'éliminer. Donc, je ne vais pas écrire assez jQuery ici juste parce que ce n'est pas un module jQuery, Jin Django to1 n'est pas destiné à couvrir jQuery trop. Et nous allons juste souffler à travers un tas de cela en utilisant jQuery parce que c'est sympa et rapide. Et donc nous voulons aussi Slashdot post et donner que Val aucune valeur, 123123. Et ça l'efface en formant bon, bon, bon, bon. C' est exactement ce qu'on veut. Maintenant. Nous devons envoyer ces données quelque part. Et ce que je vais faire, c'est que je vais coller code ici et je vais le parcourir. Je ne veux pas que tu aies à passer toute la journée à me regarder taper. Donc ce qu'on va faire ici, c'est que je vais coller des trucs. Et nous allons adapter notre code. Donc nous avons écrit jusqu'à ici, tout ci-dessous est tout neuf est ce que je viens de coller. Donc btn prop désactivé. Et allons de l'avant et bien, tout d'abord, lisez cela. Cela va sélectionner le bouton. Ça va le rendre désactivé, et ça va faire dire « poster ». Donc, nous devons sélectionner ce btn. Donc, nous pouvons maintenant dire que btn constant est égal à cela. Et c'est ce bouton de soumission JS. Ensuite, nous allons à Ajax et poster des zones de texte à la recherche d'une URL de publication de type de données. Faisons ça. Données. L'URL de l'hôte est égale à un endroit, et nous allons voir que cela se casse, mais c'est bon. On peut changer ça dans un petit peu. Les données elles-mêmes, le texte va être du texte et c'est très bien. Et cela va juste rendre cela accessible sur le backend afin que Python et Django puissent dire, oh, juste chercher, demander du texte de point d'avant-poste, et ce sera n'importe quel texte. Donc c'est notre clé. C' est notre valeur. sur_Succès. Nous allons retourner du HTML. Nous allons ensuite prendre ce modèle JS et nous allons ajouter une classe cachée. On l'a déjà fait. Allons-y et cachons ça. La zone de texte, ne vaut rien. Nous pouvons remplacer ça par ce que nous avons écrit. Et nous allons dire post conteneur ajouter HTML. Nous n'avons pas de conteneur postal. Donc, l'idée ici est de rendre ce look très, très dynamique. Donc, si nous revenons à notre HTML ici, en fait, il sera sur notre page d'accueil. Tous nos messages doivent être enveloppés dans cette chose appelée conteneur de messages et n'a pas besoin d'être appelés posts. Conteneur. On pourrait appeler ça n'importe quoi. Je l'appelle juste post container. Quel que soit le nom que vous utilisez, assurez-vous qu'il est cohérent. Donc, j'utilise id post conteneur. Vous allez vouloir utiliser le conteneur de messages d'ID. Et cela va précéder le HTML, peu importe ce que c'est. On ne sait pas encore ce que c'est. Sur la console d'erreur a averti qu'il y avait une erreur, puis changer cet état du bouton de désactivé à false. Donc ce n'est plus désactivé. Et changez le texte à l'intérieur de ce bouton pour dire qu'il y avait une erreur. Maintenant, cela devrait déclencher l'erreur pour nous. Alors allons de l'avant et essayons ça. Cliquez sur le nouveau post. Helloworld et dit qu'il est la publication des zones de texte non définies. La zone de texte n'est pas définie et c'est parce que nous ne l'avons pas définie là. Ce que nous pouvons faire est juste ceci parce que c'est la zone de texte juste ici. Donc, cela va obtenir notre zone de texte. Et puis la propriété de données, l'attribut de données, le tiret de données, le post, l'URL de tiret. Et cela utilise à nouveau jQuery. On y va, coucou, coucou, coucou. Donc on a une erreur ici. Et fondamentalement localhost port 8 mille endroit slash n'existe pas. Et ça vient d'ici. Nous devons donc donner à cela une URL d'une sorte ou d'une autre. Alors où ça devrait aller ? Eh bien, nous avons une vue déjà configurée, alors allons de l'avant et minimisons certaines de ces choses dans notre flux telles vues, nous avons une vue Créer un nouveau message ici. Nous pouvons simplement dire, s'il y a une demande de poste, quelque chose dans ce sens, poste sourd, auto-demande, args, retour. Disons une chose ici. Et cela ne va pas réellement retourner tout ce que nous voulons, pas encore de toute façon, cela ne va pas retourner HTML ou quoi que ce soit. Ce n'est qu'un exemple jusqu'à présent. Mais parce que nous pouvons utiliser cette URL, nous pouvons passer à nos URL ici, Créer un nouveau message, et nous pouvons utiliser le flux deux-points, nouveau post. Alors, allons ici. Ajoutons URL, flux deux-points, New Post. Et ça va s'assurer que nous sommes en fait des connexions. Donc, si je clique avec le bouton droit sur aller à la définition, il va s'assurer que nous sommes connectés avec le mixin requis de connexion. Et quand on postera, ça va faire quelque chose. Donc, cela devrait casser pour moi, mais faisons cela comme un exemple de toute façon, c'est une demande de poste, faire, faire, faire, faire, faire, faire. Et ça va passer ma console en bas à gauche ici. Allez-y et rafraîchissez ce monde bonjour et cela ne va pas vraiment fonctionner. Il est allé à un autre endroit cette fois, je suis allé à slash nouveau. C' est exactement ce qu'on a mis en place. Nous allons donc vérifier cette URL dans leur barre oblique d'URL. C' est exactement là qu'on voulait qu'il aille. Et voilà. Il s'agit d'une demande de poste. Il s'agit d'une demande de poste. Donc, nous savons que cela fonctionne. Maintenant, nous devons faire un post-traitement ici. Que pouvons-nous faire pour créer un nouvel objet post ? Donc, ici, parce que nous avons déjà post importé, nous pouvons dire que le post va être post dot-dot objets, dot create. Le texte va être demandé point d'avant-poste texte. Non, c'est faux. Qui a demandé point d'avant-poste obtenir du texte ? Et l'auteur va être l' utilisateur de point de requête parce que nous avons accès à cet objet de requête ici. Nous n'avons pas besoin d'utiliser la requête self-dot. Maintenant, d'où je reçois ce texte est dans main.js. Pas nécessairement celui-là, mais celui-là. C' est la clé que nous obtenons et ça va arriver à cette valeur, quelle que soit cette valeur, c'est juste qu'ils portent le même nom. On pourrait les nommer différemment si on le voulait. Et enfin, rendons du HTML. Alors revenons le rendu. Il prend toujours la requête comme premier paramètre. Ensuite, il doit prendre une chaîne comme paramètre à quel modèle particulier nous voulons utiliser. Donc, incluons ou incluons la barre oblique post.html. Si nous allons à inclure slash post.html, nous voulons rendre tout cela ici. Et ce que cela va faire, c'est qu'il va utiliser ce bloc pour la troisième fois. Donc il va être utilisé sur la page d'accueil, va être utilisé sur la page Détail. Et on aurait un nouveau poste à Ajax ici ? Il va apparaître au sommet avec ce style exact et tout. Enfin, nous devons lui donner un certain contexte. Donc, ce nouveau post va être post, et ce nouveau post vient de post.html. On cherche ce nom ici. Poste. C'est le contexte que nous lançons. Et ça va correspondre à ce nouveau post ici. Donc ça va avoir des textos, une date et un auteur. Maintenant, sur notre page d'accueil, nous avons également montrer le lien de détail est égal à vrai. Parce que nous sommes sur la page d'accueil, nous voulons le transmettre aussi. Donc montrer le lien de détail, on va faire ça vrai. Enfin, nous voulons définir que le type de contenu sera Slash d'application HTML. Non, nous n'avons pas encore importé de rendu. Nous devons donc aller de l'avant et importer le rendu. Et cela vient de, c'est facile à retenir. Raccourcis de points Django, importation, rendu. Et assurons que notre Django ne se plaint pas ici. Nous n'avons pas encore de plaintes. D' accord. Sommes-nous prêts à tester ça ? C' était beaucoup à traverser. Faisons en sorte que cela fonctionne comme nous l'attendons. Sinon, ça va se casser. Est-ce que cette rupture ? Et s'il se casse, nous corrigeons juste tous les bugs un par un comme nous le faisons normalement en tant que développeurs. Regardez ça, cette pause Read More, va passer à l'identification numéro 6. Je l'ai posté. Je l'ai posté tout juste maintenant. Et ça marche parfaitement. Allons-y et veillons à ce que nous puissions le faire encore une fois. Encore une fois. Et ouvrons ça et assurons que tout était fermé et tout. C' est écrit New Post, oh, c'est bien. De bonnes choses se passent à. Nous avons maintenant une requête Ajax. C' est l'envoi de données à une URL dynamique. Et alors reprenons ça une fois de plus. Quand quelqu'un clique sur JS soumettre, on va prendre ce texto. Nous allons nous assurer que le texte a une longueur. S' il n'y a pas de longueur, sautez-la. Ensuite, on va prendre ce bouton, qui est ce bouton particulier, le bouton sur lequel tu viens de cliquer. On va dire qu'il est en fait désactivé et on va changer le texte pour poster. Et cela fait juste en sorte que les gens ne peuvent pas cliquer deux fois dessus. Ensuite, on a installé Ajax. Et en fait ajax a déjà été configuré pour reconnaître qu'il doit chercher un jeton CSRF. Donc nous n'avons pas besoin de faire quoi que ce soit d'autre. On va dire que ce type est post. Et si nous allons ici, cela correspond aux messages sourds, cette URL sera js post text, dot data, post url. Et cela va provenir de notre point de base HTML. Non, oui, oui, oui, c'est là que se trouve notre zone de texte. Donc JS post texte, c'est notre classe va saisir cela. Et ça va récupérer des données, poster une URL, et nous jetons une URL Django. Donc c'est complètement dynamique. Et de cette façon, nous n'avons pas besoin de mettre une sorte d'URL codée en dur à l'intérieur de notre JavaScript. On peut le changer à la fin de Django. Redéployez votre application et cela fonctionnera toujours pour nous. C' est donc ce genre d'avenir, une sorte de futur à la vérification de notre JavaScript. Alors, quel type de données envoyons-nous à notre backend Python ? Et nous avons dit d'envoyer le texte. Et le texte vient de la demande postdoc get texto. Et la valeur du texte sera quelle que soit notre poste. En cas de succès, nous allons retourner des données HTML, qui est ici. Rendu des données HTML. Nous allons réellement rendre les inclusions post.html. Et nous allons jeter dans certains contextes post est post et montrer détails qs égaux à true. Et quand c'est du succès, du succès, JS modal va alors être caché. Le conteneur de messages, qui vient de notre page d'accueil ici, conteneur postal. Nous allons avant que les données, HTML, tout ce qui revient de Django, quoi que ce soit qui revienne d'ici, nous allons prédire que c'est, nous allons le mettre en haut de notre liste. Alors nous allons dire que le même bouton que nous collectons désactivé va être faux. Donc c'est à nouveau cliquable et on va juste dire New Post. Et puis nous allons prendre cette JS post-taxe cette zone de texte et nous allons la vider pour que quelqu'un puisse faire un autre post tout de suite et il ne semble pas que ce sont de vieilles données qui persistent toujours autour. En cas d'erreur. Nous allons avertir cette erreur sur console. Et on va dire que le bouton sur lequel on clique va être désactivé. Non, ça ne va plus être désactivé. Et ce texte va simplement dire une erreur. Et c'est tout ce qu'on a à faire. Maintenant, si vous n'êtes pas super familier avec jQuery ou JavaScript, c'est ok. Vous pouvez toujours télécharger le code source et vous amuser avec cela. Vous n'avez pas nécessairement besoin de connaître tout ce code, mais n'hésitez pas à explorer et à faire ce que vous voulez. Et honnêtement, vous pouvez totalement casser ce code et juste lire téléchargé plus tard et cela fonctionnera pour vous. 36. Vue de détails du profil: D' accord, allons de l'avant et ajoutons une vue détaillée de profil. Donc, d'abord, nous devons ouvrir nos profils, les URL de profil. Oh, regarde ça. On n'a pas ça. Alors allons dans notre application de profil et créer un nouveau fichier appelé URL dot py. Et ici, nous devons à partir des URL de points Django, chemin d'importation, et à partir, à partir de vues d'importation de points. Parce qu'on va l'utiliser dans une seconde. Nous voulons nous donner un nom d'application de profils. Cela va nous aider avec l'espace de noms et sur la route. Les modèles d'URL vont être un chemin. Et cela va envoyer l'utilisateur à mon site website.com barre oblique de profil. Prenons une chaîne et ça va être le nom d'utilisateur. C' est comme ça que nous allons l'appeler, c'est le nom d'utilisateur. Et quand nous l'utilisons à notre avis. Et faisons de ce rendu vues point profil, vue de détail que nous n'avons pas encore. Mais c'est bon. On y arrivera dans un instant. Et le nom va être détail. Et remarquez comment nous avons ce détail de modèle nommé récurrent ici, nous avons aussi des détails de poste. Mais nos messages sont appelés détail de flux et nos profils vont être appelés détails de profils. D' accord, sauvegardons cela et regardé Django s'est plaint qu'il n'y ait pas fichier ici appelé vue détaillée du profil. En fait, oui, ça ne va pas se plaindre parce qu'il n'est pas encore au courant. Alors allons dans notre fichier d'URL principal ici. Et nous allons faire à partir des profils importer des URL en tant que profils URL. Et nous allons en gros copier sur notre chemin ici. Et nous allons utiliser des profils, des URL, et cet espace de noms va être des profils. Maintenant, ce que nous pouvons faire à la place, c'est que nous pouvons dire profil avec une barre oblique. Viens ici et débarrasse-toi de ça. Et cela ne sera pas nécessaire parce qu'il va le préfixer avec le profil de toute façon. Et puis ce sera votre slash website.com, barre oblique profil, puis le nom d'utilisateur de cette personne. Donc, maintenant, nous pouvons voir que Django a reconnu qu'il se plaint qu'il n'y ait pas de vue détaillée de profil. Alors passons à notre point de vue. Et nous devons créer cette vue détaillée de profil. Donc, nous allons nous débarrasser de cela parce que nous allons utiliser une vue basée sur la classe. Donc, nous pouvons faire de Django.com voyage dot auth modèles d'importation utilisateur. Nous l'avons déjà fait à partir de vues de points Django, point générique, importer une vue de détail. Et puis nous devons créer une classe ici appelée vue détaillée du profil parce que c'est ce que l'URL cherchait dans nos modèles d'URL. Et cela va être une vue détaillée. Maintenant, nous allons dire que les noms de méthode HTTP sont égaux à obtenir. J' aime juste mettre cela là en sachant que si quelqu'un va lire ceci, qu'il ne est pas censé accepter une sorte de post, mettre ou supprimer ou toute sorte de vue. C' est littéralement juste une demande get. Le nom du modèle sera Profils slash point détaillé HTML. Et notre modèle va être un utilisateur. Ensuite, nous avons notre nom d'objet contextuel. J' ai tendance à toujours définir cela de sorte que ce n'est pas seulement un objet dans notre modèle car dans notre modèle, il ressemblerait à ce nom d'utilisateur de point d'objet. Au lieu de cela, ce que j'aime faire est de définir ceci comme quelque chose d'un peu plus utile. Il va appeler cet utilisateur. Et dans notre modèle, nous pourrions utiliser le nom d'utilisateur point à la place. C' est juste un peu plus logique lorsque vous lisez le code. Enfin, nous avons besoin d'un champ slug est égal au nom d'utilisateur. Et l'argument mot clé de l'URL slug acquis va être nom d'utilisateur. Et donc c'est le champ slug est comment allons-nous chercher cet utilisateur par quoi ? Slog ? Et nous allons dire regardez, regardez l'utilisateur par le nom d'utilisateur. Et c'est conduit URL mot-clé arg, le quark va venir d'ici, nom d'utilisateur. Donc, nous disons ceci comme accepte une chaîne et ce sera un nom d'utilisateur. Et ça va être notre argument de mots-clés. Ensuite, cet argument de mot-clé peut être passé ici. Nous pouvons trouver un utilisateur de cette façon. Maintenant, nous n'avons pas besoin d'écrire à toutes sortes de requêtes ORM, requêtes gestion relationnelle objet. Nous n'avons pas besoin de chercher un utilisateur manuellement. Ça va juste le faire pour nous. Alors ouvrons post.html. Et c'est, nous n'avons plus besoin de cela, alors que notre To Do, nous devons créer une nouvelle URL ici. Alors ouvrez notre syntaxe. Les profils d'URL étaient l'espace de noms que nous utilisons. Donc nous allons l'utiliser dans une chaîne. Nous utilisons les détails des profils. Et cela accepte ce que comme paramètre, une chaîne. Donc, alors nous pouvons simplement mettre le nom d'utilisateur de point d'auteur de point de poste. Et ça va agir comme notre chaîne pour aller de l'avant et sauver ça. Et actualisons notre page et voyons s'il y a des erreurs ou des plaintes. Et cela va aller au port localhost 8 mille et voir cela en bas à gauche, barre oblique, barre oblique de profil. Caleb, maintenant si nous allons ici, nous allons voir que le modèle n'existe pas. Mais c'est assez bon. Ça marche pour nous. Dans la leçon suivante, continuons et créons un nouveau modèle de profil. 37. Modèle de détail du profil: Ok, dans la dernière leçon, nous avons créé une vue détaillée de profil. Et nous avons dit utiliser un modèle appelé Profils slash détails. Donc, si nous allons aux profils, créons un nouveau dossier ici appelé modèles slash profils. Cela va être notre espacement de noms pour notre modèle, puis point HTML détaillé. Et appelons juste cette vue détaillée ici juste pour nous assurer que cela fonctionne, que, qu'il n'y a pas de fautes de frappe. Et alors revenons ici. Et si je clique sur mon visage animé, il dit profils, point HTML détaillé n'existe pas. Donc une des deux choses s'est produite ici. Soit j'ai un modèle et pas un modèle, mais j'ai une faute de frappe quelque part. Vérifions ces profils. Oui. Slash détail et ça a l'air correct. La deuxième chose est que Django pourrait ne pas le savoir. Il pourrait avoir besoin d'être redémarré. Essayons ça. Et en fait, Django avait juste besoin d'être redémarré, c'est tout ce que c'était. Alors allons de l'avant et commençons à éditer ceci. Nous allons dire que cela s'étend du point de base HTML. Le titre de bloc va être utilisateur. Et je comprends ça de notre contexte. Nom de l'objet, utilisateur. Ce nom d'utilisateur. Et le corps de bloc va avoir des trucs ici. Faisons en sorte que cela fonctionne aussi bien. Coucou, tout ça marche et il y a des trucs ici, dit Caleb là-haut. Ça a l'air bien. J'ai un autre composant. Je veux utiliser un composant de vent arrière, et c'est celui-ci ici. Alors allons de l'avant et regardons le code source. Et oui, c'est ce que je veux. Alors allons de l'avant et sélectionnons tout cela et copiez-le. Et je vais coller ça ici. Et cool, nous avons un nom de profil. Alors allons de l'avant et, et commençons à éditer comme certains des trucs que nous pouvons jeter dans une image. Nous pouvons mettre un nom ou un nom d'utilisateur, nombre de messages, nombre de followers. Et nous pouvons nous en débarrasser. Et nous ne ferons pas trop avec ça. Nous n'allons pas étendre tout cela, mais si vous le vouliez, vous pourriez ajouter comme une photo d'arrière-plan et laisser les utilisateurs changer leurs photos et des choses comme ça. Donc, au lieu d'un Livia Dunham, disons point utilisateur, nom d'utilisateur. Débarrassons-nous de celui-là. Cool, cool. Disons combien de messages cet utilisateur a-t-il ? X, X, et ajoutons une tâche à faire. Ajouter le nombre total de messages. Et nous allons chercher des followers que nous n'avons pas encore créé de followers, mais nous allons en un peu pour ajouter le total des followers. Assez bien. Maintenant, nous devons aller ajouter cette image là-dedans. Et ce que nous pouvons faire, c'est que nous pouvons référencer une autre page d'accueil, butter post.html. Donc, nous savons que nous devons charger notre vignette et nous savons que ça va ressembler à ça. Donc, honnêtement, je vais juste copier ça. Chargez la vignette là-dedans. Et où est cette image ? Cette image va être ici. Et j'ai juste collé ça dans mon presse-papiers. Et donc cela ne va pas être post.All a écrit une image de profil. Cela va être le profil de point de l'utilisateur, l'image de point et ne cherche pas 372 par 372 En fait, ce n'est pas correct. C' est censé être 373 par 3 73. Tu pourrais aussi bien arranger ça pendant qu'on y est. Et quelle est cette image, nous ne savons pas vraiment. Donc disons, faisons-en un 200 par 200. Voyons si ça marche. Et il ne déplace pas l'image source d'origine vers le haut et simplement remplacer l'URL. Et je viens de supprimer l'ancien, celui que j'ai initialement collé à l'URL du point de messagerie instantanée. Ok, pas mal, pas mal. Mon visage est un peu là. Essayons un 100 par 100. C' est mieux. Et maintenant, quand quelqu'un fait un post comme ce gène, en fait voir leur profil. Maintenant encore une fois, vous pouvez étendre cela autant que vous le souhaitez. Vous pouvez ajouter une nouvelle image d'arrière-plan et là vous pouvez les laisser changer votre image d'arrière-plan, toutes sortes de choses. La seule autre chose que nous allons vraiment faire dans ce cours particulier est que nous allons ajouter le nombre de messages, le nombre de followers, et ensuite être en mesure de suivre et de déssuivre les gens. Ensuite, ajoutons le nombre total de messages à cela. 38. Total des postes: Bon, donc si on jette un coup d'oeil ici sur notre page de profil, il est écrit Ex Post et Ex followers. Ce que je vais faire, c'est que je vais vous montrer comment ajouter des messages X. Et je vais laisser un truc à faire ici pour que tu puisses ajouter ton propre nombre d'adeptes. Allons-y et ouvrons notre éditeur. Et là où il est dit x messages, nous devons mettre le nombre total de postes là-dedans. Alors faisons ça. Total des postes, nous allons nous préparer pour le succès. Nous allons écrire le total des messages là-dedans, mais maintenant nous devons l'ajouter parce que si nous actualisons, ça ne dit rien. Donc, ce que nous pouvons faire est à notre avis, dans nos profils slash vues dot py fichier. Et nous pouvons dire def, données getContext. Auto-financer toute sorte de mots clés args à un pourrait prendre. Prenons le contexte. Donc, nous allons dire des données GetContext super point, en passant n'importe quelle sorte de quarks qui auraient pu nous être passés et retourner le contexte maintenant pour obtenir quelque chose que nous pouvons dire ou pour ne pas obtenir quelque chose, mais pour ajouter quelque chose à notre modèle, pour ajouter de nouveaux contextes ou un modèle, nous pouvons dire contexte. Et comment on a appelé ça ? Nous l'appelons postes totaux. Le total des messages est égal à, Wow, bonjour. Et c'est tout. C' est tout ce qu'on va faire. Attendez que Django redémarre. Retournez, et ça va dire, Wow, bonjour messages. Maintenant, ça marche. C' est obtenir quelque chose du backend, mais pas vraiment dynamique. Rendons-le dynamique par glutton, en recueillant le nombre de messages. Donc, nous devons importer cela à partir des modèles de point Fi, importation post. Et puis nous pouvons dire objets point post, filtre point par l'auteur. L' auteur va être qui que ce soit cet utilisateur particulier. Nombre de points. Non, nous ne savons pas qui est cet utilisateur car l'utilisateur est une variable non assignée dans cette méthode en ce moment. Alors allons de l'avant et créer cette variable utilisateur qui va simplement venir de self.age, get object. Et donc si je peux orthographier ce droit, get object va obtenir cet objet utilisateur. Donc, il va chercher, un utilisateur va le chercher, c'est nom d'utilisateur et il va le faire correspondre avec le nom d'utilisateur qui est dans l'URL. S' il trouve un utilisateur, que les utilisateurs vont alors être, par exemple, Caleb ou test ou vous, ou votre professeur, ou une chaise si vous le souhaitez, ou une sorte de compte mème. Et donc ce que nous disons ici, c'est tous les messages, tous les objets post, les filtrer par l'auteur, s'assurer que l'auteur est celui que cet utilisateur actuel est sur sa page de profil, puis compter tous ces messages. Et rafraîchissons. Et j'ai six postes. Est-ce exact ? 123456. En fait, j'ai six postes et c'est ainsi que nous ajoutons cela. Maintenant, ce que je vais faire, c'est que je vais vous laisser comprendre comment ajouter des followers là-dedans. Maintenant, nous n'avons pas encore d'application de followers, donc vous n'avez pas à le faire maintenant, mais je vais ajouter un truc à faire ici, nombre total de followers. Et tu vas devoir trouver comment ajouter les adeptes là-dedans. Je vais ajouter un truc à faire ici pour ajouter le nombre total de followers ont déjà cela là-dedans. Donc je vais te laisser ça. 39. Ajouter un bouton de suivi: Ok, préparez-vous à commencer à être capable de suivre les gens. Donc ce qu'on veut faire ici, c'est on a besoin d'une sorte de bouton de suivi en ce moment, il n'y a pas d'action. Vous pouvez voir le compte de quelqu'un, mais vous ne pouvez pas les suivre. Alors allons de l'avant et ajoutons un bouton de suivi. Donc juste en dessous où il est écrit Caleb, ou quel que soit le nom d'utilisateur, votre nom d'utilisateur va être différent. Je vais ajouter un petit bouton. Et donc j'ouvre les détails des profils. Et je cherche mon nom d'utilisateur ici. Et je vais coller un bouton. Et ce bouton, nous avons déjà vu ce bouton avant. Je vais vous montrer ce bouton. Ça ressemble beaucoup à ce bouton, n'est-ce pas ? Donc tout ce que j'ai fait c'est de copier ça. Et ce que je veux faire ici, c'est m'assurer que j'ai du JavaScript attaché. Donc, le type ne va pas être Soumettre, le type va simplement être un bouton. Et en fait, ça n'a pas besoin d'être un bouton. Il peut s'agir d'une URL ou non d'une URL, mais aussi d'une balise. Donc, une balise d'ancrage si vous voulez utiliser un bouton. Et je vais dire que ça s'appelle le JS suivre. Et nous devons finalement trouver qui cela va suivre. Donc, les données, le nom d'utilisateur est égal au nom d'utilisateur point point utilisateur. Et cela va permettre à notre JavaScript de déterminer qui est cet utilisateur. Et nous pourrions utiliser un identifiant d'utilisateur si nous le voulions ou utiliser un nom. Cela n'a pas vraiment d'importance, juste une façon unique de chercher l'utilisateur. Et je vais mettre ce texte ici pour que JS suive le texte. Et encore une fois, nous sommes juste en train de nous mettre en place pour les futurs sélecteurs de puits JavaScript. Donc, nous pouvons sélectionner ce noeud particulier ou nous pouvons sélectionner ce noeud particulier et nous pouvons nous assurer que quelque chose se passe réellement. Allons de l'avant et faisons en sorte que cela n'apparaisse pas. L' utilisateur n'est pas connecté. Donc, si l'utilisateur de la requête est authentifié, alors ils peuvent voir ce bouton. Sinon, disons la classe de marge, trois premiers, notez que j'ai fait ça mal. Point m t tiret trois. Connectez-vous pour suivre cet utilisateur. Sinon et mettre fin à ça. On y va. Ok, on dirait que ça n'a rien fait. C'est bien. Ouvrons une nouvelle connexion de navigation privée pour suivre cet utilisateur que le texte est un peu trop grand. Peut-on réduire ce texte ? Texte ? Petit ? Ouais, ça a l'air un peu mieux. Et parce que je suis connecté ici, je peux déjà le faire maintenant. Je ne veux pas pouvoir me suivre. Donc, nous allons envelopper cela dans une déclaration de plus si. Donc, ce que nous pouvons faire ici, c'est si vous êtes connecté, oui, super. Vous devez être en mesure de vérifier si vous comparez avec vous-même. Donc, disons que si l'utilisateur point de requête n'est pas l'utilisateur actuel, cela ne va pas montrer quoi que ce soit du tout. On y va. Ça ne marche pas. Ou plutôt, ce n'est pas censé marcher, mais ça n'arrive pas pour moi. Je vais aller voir le compte de test et voir si je peux suivre le compte de test. Je peux suivre le compte de test. Cool, cool, cool. Mais je n'ai pas le droit de me suivre. C' est une bonne nouvelle. Nous ne voulons pas être en mesure de nous suivre , car alors nos fonctionnalités peuvent être pleines de nos propres trucs. Quoi qu'il en soit. 40. L'application follower: D' accord, on parle d'adeptes. Nous devons être capables de suivre les gens et de suivre qui suit qui. Alors allons de l'avant et créer une nouvelle application appelée followers. Donc, dans mon terminal ici, je vais taper Python managé i pi, démarrer les followers d'applications. Et à ma gauche, vous verrez un nouveau dossier appelé followers. Allons dans nos paramètres dot pi et nos applications installées. Et ajoutons des followers ici quelque part. Peu importe où à ce stade appelé followers, Django va redémarrer. Tout a l'air bien. Ouvrons nos adeptes et passons à model.predict. Et créons notre nouveau modèle ici. Alors appelons ceci une classe follower suivre ou est un modèle point, modèle, mongoose.model, modèle. Une façon intéressante de dire ça. Et puis nous avons suivi par est égal aux modèles points étrangers, clé, utilisateur. À la suppression. Nous n'avons pas encore importé d'utilisateur, mais c'est bon. Modèles point cascade. Donc, chaque fois que l'utilisateur suivi est supprimé, nous allons supprimer cette relation. Et donnons-lui un nom connexe. Nom connexe va être suivi par parce que en fait je vais commenter cela. Je vais te montrer pourquoi on doit faire ça dans une seconde. Ensuite, nous devons voir qui cette personne suit est égale deux modèles, point clé étrangère. Cela va également être un utilisateur sur la suppression est égale deux modèles point cascades. Donc, lorsque nous supprimons cet utilisateur particulier, il va également supprimer cette relation. Donc, si vous supprimez le compte que vous suivez ou que cette personne supprime son propre compte, alors il va supprimer cette relation. Sinon, si la personne qui vous suit et supprime son compte va également supprimer cette relation. Donc, ceci est suivi par deux relation suivante. Donnons à cela une chaîne def chaîne, donc il a une représentation de chaîne, retournons une sorte de chaîne F que nous pouvons faire self.view suivie par DID quel que soit cet ID utilisateur, suit self.age, suivant l'identifiant de point. Et nous allons aussi nous donner une méta de classe. Et disons unique ensemble va être suivi et suivi. Donc, cela va créer un index unique. Donc, vous pouvez voir si quelqu'un vous suit, si vous les suivez, et qu'il ne peut y en avoir qu'un. Pour que vous ne puissiez pas suivre les gens encore et encore et encore et encore et encore. Et nous allons juste nous assurer que c'est un tuple ou un tuple. Je ne sais pas. Parfois ce tuple, parfois c'est tuple. Oui. D'accord. Nom de l'utilisateur n'est pas défini. Revenons à partir du contrat de point Django, point auth dot modèles d'importation utilisateur. Et jetons un coup d'oeil à ce que cela dit ici. Faisons tout ça. Et il est dit, et c'est pourquoi nous allons ajouter des noms connexes ici. Il dit suivi par des affrontements avec accesseur inverse pour le suivi de follower. Donc, ceux-ci sont fondamentalement conflictuels dans le pays de la magie de Django. Ce que nous pouvons faire pour éviter cela, si jamais vous voyez quelque chose comme ça, c'est que nous pouvons simplement lui donner un nom connexe et nous lui donnerons un nom connexe. Et nous allons juste l'appeler suivant et followers qui sont suivis par et suivant. Et cette erreur disparaît. Ensuite, nous devons faire des migrations et nous devons également épeler cela correctement. Et puis migrez. Cool. Donc, nous avons ça là-dedans. Enregistrez également ceci auprès de notre administrateur. On l'a déjà fait avant. Et alors, allons dans notre alimentation. On va copier cet administrateur. Les abonnés vont à notre administrateur ici, collez-la là-dedans. Et au lieu d'importer des modèles et d'obtenir des messages, nous voulons obtenir follower. C' est ce que nous appelons ce modèle ici, suiveur. Et sélectionnons simplement tous ces éléments. Django devrait redémarrer et il ne devrait y avoir aucun problème. Maintenant, revenons à notre administrateur et nous allons pouvoir voir que nous avons une nouvelle application ici appelée followers et il n'y a personne qui suit qui que ce soit. Et je peux sélectionner Caleb pour suivre Test. Enregistrez et ajoutez un autre. Essayons ça. Caleb va encore suivre le test et sauver. Et il dit, suiveur avec cela suivi par en suivant existe déjà. Donc un seul peut exister. C' est donc une contrainte unique sur notre base de données. Et Django nous l'appliquera. Donc, à ce stade, vous devriez avoir une application Django follower. 41. Suivre et ne suivre: Très bien, nous avons besoin d'un moyen de suivre et d'annuler le suivi d'un utilisateur. Donc, si nous ouvrons notre application, je peux suivre ce compte de test. Mais quand je clique, ça ne fait rien. Donc nous avons besoin de ça pour faire quelque chose. Nous avons besoin d'une sorte d'interactivité. Ensuite, nous avons besoin d'Ajax ces données vers et depuis les serveurs. Nous devons envoyer des données au serveur et accepter les données du serveur et changer le mot suivre deux suivant ou unfollow ou quelque chose comme ça. Nous pourrions aussi changer le nombre d'adeptes là-dedans. Donc je vais te laisser le soin parce que je n'ai pas fait ça intentionnellement. Je vais vous laisser le soin de vous. Mais si vous le vouliez en JavaScript, vous pouvez aussi mettre à jour dynamiquement. Et une fois que nous aurons fini avec cela, nous allons changer notre page d'accueil pour nous assurer que nous ne montrons que des messages pertinents pour nous des personnes que nous suivons. Alors allons-y et travaillons là-dessus. Nous devons ouvrir le profil détail point HTML. Et nous avons ce JS suivre. Et donc nous voulions écrire du JavaScript avec ça. Donc, allons dans notre front end, main.js, et ajoutons un autre écouteur d'événement ici. Ainsi, chaque fois que vous cliquez sur cette fonction, point E empêche par défaut. Et cela va juste empêcher un lien d'aller n'importe où ou un bouton de soumettre un formulaire console.log cliqué. Et on veut juste s'assurer que ça marche. Cool. Cliqué. Et allons de l'avant et collectons des données aussi. Donc nous devons, ce que je peux faire, c'est peut-être diviser ça. Non, c'est trop bondé. Ok, partageons ça. Donc, dans notre layout.html détaillé, chaque fois que vous cliquez sur suivre, Il y a un nom d'utilisateur et il devrait y avoir une sorte d'action. Donc, nous pouvons faire des données L'action est égale à suivre ou à annuler. C' est ce que ça va être. Allons de l'avant et obtenons ce nom d'utilisateur et faisons cette action. Et nous avons également besoin d'URL de données quelque part pour en fait Ajax est des données de porte à plutôt. Et donc ça va être URL. Profils. Suivre. Et nous allons dire point utilisateur, nom d'utilisateur. Maintenant, ça n'existera pas. Donc, lorsque nous chargeons notre template, cela va nous donner une erreur. Juste comme ça, inverse pour suivre introuvable. Et donc, comme toutes les choses Django, nous avons besoin de faire plusieurs choses à la fois. Et donc il va à nos profils et il va à nos URL. Copions simplement ceci et mettons suivre à la fin et la vue détaillée du profil. Allons suivre vue. Maintenant, cette vue de suivre n'existe pas. Nous allons donc dans notre URL ou nos vues écrou ou URL. Sauf si vous suivez la classe vue. Et nous ne voulons pas que ce soit vraiment quelque chose de spécial. Nous voulons juste que ce soit une vue régulière. Mais nous devons également nous assurer que c'est une connexion, que la connexion de l'utilisateur. Alors. Connexion vue requise et je ne crois pas que ce soit dans votre encore. Alors, où avons-nous mis ça ? Vues de flux ? On fait défiler ici, on peut juste aller par ici. Je vais littéralement copier et coller ce copier-coller. Et au lieu de la vue détaillée, nous allons ajouter une vue ici. Et enfin, Python n' aime pas les lignes vides. Dit connexion requise vue sur les noix, parce que ce n'est pas une vue, c'est un mixin. On y va. Django ne se plaint plus. Donc, tout d'abord, ce que nous devons faire est que nous devons nous assurer que notre modèle se charge. Actualisons ce modèle ne se charge toujours pas. Je me demande pourquoi ça ne fait pas ça ? Parce que je n'ai pas appelé ça la bonne chose. J' ai copié et collé. C' était une copie a passé un problème. Lorsque vous copiez et collez, Ne faites pas ce que je fais. Assurez-vous toujours de lire tout ce que vous avez copié et collé. Ok, nous allons nous assurer que ça marche. Examinons ça et voyons ce que nous avons ici. Nous avons un bouton avec une URL de données, un nom d'utilisateur de données réelles. Et nous savons que lorsque nous cliquerons dessus, il sera cliqué. Donc maintenant, nous devons faire quelque chose. Nous devons collecter des données ici. Donc revenons dans, je vais fermer certains d'entre eux dans notre main.js et où nous avons ce fichier ajax. Ce que je vais faire, c'est que je vais copier tout ça. Boum. Et nous allons écrire un an très, très simple. Nous ne ferons pas beaucoup de traitement ou de validation JavaScript plutôt. Alors, quel type de données voulons-nous envoyer ? Nous voulons envoyer, l'action va être une sorte d'action. Donc, parce que c'est sur ce bouton de suivi JS, qui est juste là, c'est une propriété ici. Nous pouvons dire ceci, cette ATTR, Action de données. Et la raison pour laquelle j'utilise l'action de données au lieu de données de points. Et puis juste mettre de l'action là-dedans. Je vais vous montrer qu'il y a deux façons d'écrire ça. L' action de données va être encaissée. Cela ne fonctionnera pas pour vous si nous le modifions à l'avenir, ce que nous allons faire. Alors que ATTR, l'action de données d'attribut ne va pas être mise en cache et il va la rechercher à chaque fois. Donc c'est juste une belle petite façon de contourner ça, ce problème de mise en cache. Nous devons vérifier un nom d'utilisateur. Donc le nom d'utilisateur va être ce nom d'utilisateur de données point, ou nous pouvons utiliser les données ici parce que cela ne va pas être un problème si elle est mise en cache, ce nom d'utilisateur ne va jamais être changé. Attendu que l'action ici va changer de suivre à unfollow, suivre à unfollow. Mais le nom d'utilisateur ne changera jamais. Le nom d'utilisateur sera le même sur chaque vue détaillée de profil. Enfin, nous avons besoin de l'URL de données, et ça va venir de Django. Cela va être rendu modèle interne droit. Et nous allons nous assurer que JavaScript est dynamique. Et donc nous allons changer cette URL pour cette URL de données de point. C' est ce que je l'appelle, bonne URL. Oui. Et nous allons juste nous assurer qu'il y a une virgule après cela. Donc, fondamentalement, nous allons dire, aller à cette URL où que ce soit. Et nous pourrions changer cela sur le backend Django et JavaScript ne sera pas transporté à l'avenir. L' action sera suivie ou non. Le nom d'utilisateur sera quel que soit ce nom d'utilisateur sur cette page. Et allons-y et débarrassons-nous de tout ça parce qu'on n'a pas besoin de ça. Et nous allons juste garder ça gentil et simple. Celui-ci ne va pas retourner des données, des données HTML. Celui-ci va retourner juste des données régulières sous la forme de JSON comme nous attendons généralement une requête, a, a, une, ajax. Ok, alors sauvegardons ça. Et voyons ce qui se passe ici. Cliquons dessus. Et nous obtenons une méthode 405 non autorisée. Cool. Donc ça veut dire qu'on peut vraiment faire quelque chose avec ça. Cela signifie que notre point de terminaison fonctionne. Revenons donc à l'endroit où nos commentaires ne sont pas dans le flux. Nous ne sommes pas dans les vues de profil frontal, les noms de méthode HTTP. Et nous allons dire que le seul nom de méthode qui est autorisé ici est post. Essayons encore ça. Et cette fois, nous obtenons une méthode non autorisée aussi. En fait, c'est OK. Je pense que ce que nous cherchons ici est, si je me souviens bien, sourd post auto-demande, args et quarks. Et on veut juste rendre quelque chose ici. Donc, retournons une réponse JSON de w1 est égale à true. Et nous devons importer cette réponse JSON de Django point HTTP import réponse JSON. Ok, essayons ça. Ok, on dirait qu'il fait tout ce qui est activé sur XHR ici. Maintenant, regarde ça. On en arrive à des centaines maintenant, c'est bon, et chaque fois qu'on clique dessus, on obtient un 200. Donc ce qu'on veut faire ici, c'est dire que les données sont égales à demander et point post-doc. Parce que j'aime travailler avec des dictionnaires. Ensuite, nous pouvons dire si l'action n'est pas dans les données ou le nom d'utilisateur pas dans les données, retourner une réponse HTTP, mauvaise requête. Je vais copier cela pour ne pas avoir à taper 300 fois la fonctionnalité. Et je manque facilement des données, et cela vient aussi de HTTP. Et donc ce que cela va dire, c'est que si quelqu'un essaie d'accéder à cette URL, même s'il est connecté, il va chercher une action et un nom d'utilisateur. Et si ça leur manque, ils vont avoir une mauvaise réponse. Maintenant, allons de l'avant et essayons de trouver cet utilisateur. Alors essayons. L' autre utilisateur. Est égal à l'utilisateur dot objets get, puis le nom d'utilisateur va être nom d'utilisateur de données. Et cela vient de notre objet de données ajax demandé est notre requête ajax, et c'est le nom d'utilisateur sur notre objet utilisateur. Est importé par l'utilisateur. En fait, c'est une bonne nouvelle. Et c'est sauf ça. Si l'utilisateur n'existe pas. Donc si quelqu'un essaie d'être malveillant et qu'il est assez bon pour être malveillant. Disons que l'utilisateur n'existe pas exception et renvoie une réponse HTTP, requête incorrecte et un utilisateur manquant. Ou on pourrait 404 ou tout ce que tu veux faire là-bas. Donc maintenant, nous pouvons dire si l'action des données est égale à suivre, sinon, annuler. Et j'aime laisser de petits commentaires ici pour que les gens sachent ce que je fais quand ils lisent le code source. Et donc l'idée ici est que tu es censé suivre quelqu'un. Allons, faisons un get ou créer. Donc, nous pouvons dire le disciple et créé parce que cela ne va pas revenir. Un tuple est égal aux objets point suiveur, point, get ou create. Et nous allons dire, suivi par est égal à leur utilisateur de point de quête. Et voici l'autre utilisateur. Et que d'autres utilisateurs venant d'ici. Et moi, je fais personnellement cette demande de suivre quelqu'un. Donc, je vais dire que cette personne est suivie par moi ou la demande de cet utilisateur. C' est comme ça que j'ai eu cette logique. C' est un peu déroutant au début, mais c'est plus logique quand on travaille un peu ici et là. Sinon, nous voulons annuler la poursuite de cette personne. Donc follower est égal aux objets point follower point obtenir suivi par est égal à l'utilisateur point de requête, et suivant est égal à l'autre utilisateur. Voyons si on peut avoir cette personne. Essayons ceci cependant, parce que ce suivant pourrait ne pas exister. Nous devons donc accepter cela. Et nous pouvons dire, suiveur n'existe pas. Passe. Ou on pourrait dire que le disciple est égal à Aucun. Et puis ici, nous pouvons dire, s'il y avait un follower qui a été trouvé, follower dot delete. Ensuite, dans notre réponse JSON, nous pouvons dire que fait est vrai ou généralement succès vrai ou quelque chose comme ça. Et puis nous pouvons dire, nous voulons retourner un peu de texte. Le libellé ne sera pas suivi. Et ce sera le libellé que nous remettrons dans le DOM. Donc, déssuivez, si l'action de données est égale à suivre et il s'agit d'une instruction ternaire en Python. Sinon, suivez. Donc, si quelqu'un suit quelqu'un, nous allons retourner le libellé non suivi. Sinon, si quelqu'un n'a pas suivi, quelqu'un, renvoyez le mot, suivez. Et je vais te montrer à quoi ça ressemble ici. Nous pouvons faire des données console.log et nous obtenons une erreur de serveur interne. Ok, allons voir quel genre d'erreur nous avons. Abonnés non définis. Oh oui, ça a du sens. Et nous allons devoir aller et importer cela des followers dot models import follower. C'est du rafraîchissement. Pour aller de l'avant et suivre. Et il dit, le succès avec la vraie formulation ne suit pas. Maintenant, allons voir nos adeptes ici. L' un suit deux, je personnellement, Caleb, test M1 est deux. On peut voir ça à Caleb et tester. Allons de l'avant et supprimons ceci. S' assure juste que cela fonctionne. Cliquez à nouveau, actualisez notre administrateur. C'est là. Maintenant, nous devons changer ça. Donc, si quelqu'un est suivi, vous devez l'annuler et si quelqu'un n'est pas suivi ou qu'il n'est pas valide, vous devez pouvoir les suivre à nouveau. Donc, nous allons dans notre point principal js ici et notre bouton. Nous pouvons dire que ce 0.2x va être une formulation de points de données. Allons voir à quoi cela ressemble maintenant quand je rafraîchis ce unfollow et oh, en fait, ça a changé à beaucoup de ce que je veux. Je veux toujours ce bouton et tout. Je veux que le texte de suivi JS change, mais je veux que SVG reste là-dedans. Donc, ne faisons pas cela, mais sélectionnons ce nœud particulier. On y va, sans suivre. Nous devons également changer cette action et cette action, où êtes-vous suivie, doit être abandonnée. Donc, ce que nous pouvons dire ici, c'est si l'action est égale à suivre, changer le libellé pour annuler, sinon, le contraire. Et donc nous pourrions dire cela parce que nous n'utilisons pas fonctions ici où nous utilisons des fonctions fléchées. Donc, nous n'utilisons pas de fonctions avec le mot-clé this. Nous trompons en fait jQuery un peu ici. Nous pouvons continuer à utiliser cela en référence à JS, suivez ce point ATTR. L' action des données va être annulée. Sinon, ça va l'être. Et nous allons juste nous assurer que cela fonctionne. Donc, nous avons un test de nom d'utilisateur. Les actions de données doivent être suivies et non suivies ici, allons de l'avant et cliquez dessus. Et ça ne fait pas ce que je m'attendais à faire. Pourquoi faites-vous ça ? Déboguer cette console. Journal des points, débogage. Se désabonner. Suivre. L' action n'est pas définie. Et c'est parce que je l'ai mis ici, les transforme en une variable. On y va. L'action constante est égale à ce que l'action est réellement égale à l'action. Et puis nous pouvons dire si cette action est égale à suivre yada, yada. Ok, voyons si ça marche maintenant et ça devrait mieux fonctionner. On y va. Il passe de suivre à unfollow. Une dernière chose que nous devons faire, et nous allons le faire dans la prochaine leçon, c'est qu'on doit voir si je suis en train de suivre quelqu'un. J' ai besoin de changer ce bouton et cette action par défaut de suivre en unfollow. On va le faire dans la prochaine leçon. 42. Suivez et ne suivez pas dynamiquement: Déjà, nous devons voir si quelqu'un suit quelqu'un ou non. Donc si je fais ça, allez voir les disciples. Cool, cool. Donc, il dit que je suis ce que je rafraîchis cette page. Ça ne dit pas que je les suit. Il veut que je les suive. Ça m'incite à suivre quelqu'un et ça doit être le contraire. Et donc ce que nous devons faire est que nous devons entrer dans notre point d'utilisation et notre vue détaillée de profil. Nous devons ajouter un contexte ici. Donc, nous devons dire que si la requête dot user_data est authentifiée, le contexte de vous suivez est égal aux objets point follower, point filter. Et qui suis-je ? Cet utilisateur particulier, que nous avons mis en place ici, les utilisateurs égaux à self.age setObject. Et suivi par est égal à moi-même, demande utilisateur point. Et puis nous avons juste besoin de voir si cela existe. Est-ce que cela existe ? Et cela au lieu de dire filtre et pourrait éventuellement obtenir plusieurs lignes, il va simplement dire qu'il n'existe pas oui ou non, et il va retourner vrai ou faux. Maintenant, voici la chose, l'utilisateur point de requête n'existe pas. Nous n'avons pas de demandes dans obtenir des données contextuelles, nous devons donc l'ajouter à notre envoi. Donc, envoi sourd, auto-requête, args, quarks, et retour arguments de requête d'expédition super point et quarks. Et tout ce que nous voulons faire ici, c'est une requête self.age est égale à cet objet requête. Et maintenant, au lieu de dire la requête ici, nous pouvons dire si la demande de point auto, cet utilisateur est authentifié et nous pouvons faire la même chose ici. Si le point utilisateur de demande autodidacte existe, disons que vous suivez. Maintenant, dans notre vue détaillée, nous pouvons dire en raison de, en raison de, en raison. On peut changer le libellé ici. Donnez-nous un peu d'espace pour travailler à l'intérieur de la travée. Si vous suivez, vous ne suivez pas, sinon suivez. Et si et voyons si cela fonctionne. Ils sont réels. Suis-je en train de suivre cette personne ? Je suis cette personne. Il veut maintenant que je me désuive. Nous savons qu'il y a une autre chose que nous devons faire ici, c'est que nous devons changer en tant qu'action. Et donc nous pouvons dire si vous suivez, non, si vous suivez plutôt, nous allons juste préfixes avec le mot sur. Et si c'est le cas, il va être suivi ou non suivi. C' est unfollow et delete. Et nous voyons que ce qui suit a été supprimé. Et si je retourne en arrière et je suis à nouveau et juste rafraîchir mon administrateur, il apparaît dans un autre exemple, non suivre, et il disparaît. Juste comme ça. Nous avons maintenant un suivant. Nous pouvons suivre plusieurs personnes. Maintenant, le truc est que si je suis cette personne et que je retourne ici, il est toujours juste que les messages sont ici, nous devons changer, ça. Nous devons vraiment y aller et modifier les messages que nous voyons. Et nous allons le faire dans la prochaine leçon. 43. Publies d'accueil dynamique: D' accord, nous approchons de la fin ici. Donc, ce que nous devons faire, c'est que nous devons personnaliser notre flux de page d'accueil. Et donc ce que nous allons faire, c'est que nous allons ouvrir nos vues sur les flux. Et nous avons cette page d'accueil, ListView. Et il y a deux façons différentes de le faire. Nous pouvons écraser la requête définie ici en écrivant def, get query set, self, faisant un tas de choses là-dedans, ce qui est probablement la bonne façon de le faire. Mais je voulais adopter une approche légèrement différente. Et je veux convertir cela d'un ListView en une vue de modèle simple. Et donc, allons changer cette vue ListView en une vue de modèle en important cela. Et je ne pense pas qu'il y ait autre chose sur votre autre chose que d'accord, ce que je cherchais était une autre vue de liste. Je peux supprimer cela. Maintenant, voici la chose, c'est que, même si je supprime cela dans, Django cesse de se plaindre, il n'y a plus de requête définie pour nous. n'y a plus de modèle que nous devons aller et en fait pas plus de posts. Donc, nous devons vraiment aller les supprimer et les ajouter à notre contexte. Donc, nous pouvons faire des données sourds, GetContext. Auto-demande, args et quarks. Le contexte est égal à super et die obtenir des données de contexte, requête. Args. Et les quarks. Retourne ce contexte. Maintenant, nous pouvons dire que les messages contextuels sont égaux à, je pense que c'est ce que nous l'avons appelé. Espérons que j'ai rendu ça trop petit. Leur page d'accueil, oui, on l'appelait des postes. Nous devons donc ajouter cela à nos contextes. Post.all objets, tous les points. Obtenir les données contextuelles manquantes d'une demande d'argument positionnel requise. Oh, d'accord. Nous n'avons pas de demande dans nos données GetContext. C' était un petit pète cérébral que j'avais là. Attendez qu'il se recharge. Ok, donc je pense que c'est en fait dans l'ordre inverse. Ils sont dans l'ordre inverse maintenant. Nous devons donc changer cela aussi. Et nous devons voir si quelqu'un s'est connecté pour changer dynamiquement ces messages. Donc, tout d'abord, faisons ça, supprimons ça. Et disons que si l'utilisateur de demande autodidacte est authentifié, suivant va être une liste personnalisée. Sinon, je ne suis pas censé l'être. Post va être une liste personnalisée et post. Sinon, si quelqu'un ne s'est pas connecté va simplement être des objets de point de poste, point, ordre de point par ID. Et montrons les 30 premiers comme nous l'avons fait à l'origine. Aucune requête de point auto n'est pas encore définie, donc nous devons faire l'envoi sourd. Auto-demande. Args, quarks, retour envoi super point, demande. Args enquête. Et la demande de point auto va être, et la question est égale à la requête. Et cela nous permet d'utiliser la requête self-dot ici. Donc maintenant, si quelqu'un est connecté et que nous ne savons pas ce que ces messages sont censés être. Nous avons besoin d'une liste de tous nos adeptes. Donc, disons une liste de qui nous suivons. Donc, suivant est égal aux objets dot-dot-dot suiveur, filtre point. Et les gens qui sont suivis par moi, self.age demande point utilisateur. Et cela va nous donner un ensemble de requêtes géant. Maintenant, nous ne voulons pas une requête géante que nous voulons juste une liste de ces utilisateurs. Donc, nous pourrions faire des valeurs de points, liste suivante. On voulait juste énumérer toutes les personnes qui suivaient. Et nous voulons nous assurer que c'est plat et que c'est imprimer ça. Imprimez le suivant. Je vais commenter cette ligne afin qu'il ne se plaint pas lorsque je charge le modèle. Et rechargeons ça. Elle ne montrera rien. Et par rien, je veux dire, il va montrer une erreur d'importation comme prévu. Donc, nous allons faire cela à partir des modèles de point followers import follower. Maintenant, rechargeons ceci et nous devrions, nous devrions voir qu'il n'y a pas de posts là-dedans. Et ici, on devrait voir quelque chose. Cet ensemble de requêtes de deux. Non, nous ne voulons pas que ce soit un ensemble de requêtes et ça dit juste deux dedans. Nous voulons que ce soit une liste, donc nous pouvons taper cast ceci comme une liste si nous le voulions. Et en fait, mettons cela sur plusieurs lignes juste parce que Python nous permet de le faire. Maintenant, ce que nous pouvons dire, c'est que les messages copient tout ce truc. Mais au lieu de tout, on peut filtrer. Et nous pouvons dire que l'auteur est dans une liste des suivants. Et au lieu d'en avoir 30, si vous êtes connecté, allons-y et montrons 60. Et allons-y et assurez-vous que cela fonctionne. Et cela n'a pas fonctionné pour moi. Et c'est parce que je n'ai pas jeté de messages dans mon contexte. Contexte. Les messages sont égaux à des messages. Et ce contexte, ce post vient de là, juste ici. C' est important. Il n'y a rien à parcourir si nous ne l'ajoutons pas au contexte. On y va. Allons de l'avant et cliquez sur ce gars est le nom, désuivez, allez à la maison. Il n'y a rien là-bas. Maintenant encore une chose. S' il n'y a rien, qu'est-ce qu'on montre ? Donc, disons que si cette liste est vide, donc si ce n'est pas suivant, a montré la valeur par défaut 30. Sinon, les messages vont être un peu plus dynamiques. On y va. Valeur par défaut 30. Faisons ça. On y va. Et ce travail qui montre tout le monde, le post de tout le monde les 30 derniers. Allons de l'avant et suivons. Eh bien, je ne peux pas me suivre. Ça ne se montre pas. Ce n'est pas une option pour moi. Mais ce que je peux faire, c'est que je peux suivre cette personne, rentrer chez moi, et ça change ma liste pour moi. Donc maintenant, nous avons une application de travail. Nous pouvons nous en débarrasser aussi. Ce n'est d'aucune utilité. Et maintenant, nous avons une application de travail. Il y a quelques bits et bobs que j'aimerais que vous travailliez dessus et ensuite vous parler de ceux de votre projet dans la leçon suivante. 44. Votre projet: Ok. Bonjour et bienvenue à votre projet final. Dans votre projet final, nous, alors que tout ce Django à u1 a été un grand projet en soi. Mais j'ai laissé quelques choses ouvertes à l'interprétation. Par exemple, si je vais à Caleb, ça va vous montrer que j'ai XX adeptes. Tu dois remplir ça. Combien d'adeptes avez-vous ? Une autre chose que j'aimerais que vous fassiez, c'est un peu de travail de première ligne. Donc, lorsque vous vous connectez, vous devez réellement modifier ces modèles. Donc ils ont l'air un peu plus gentils parce qu'en ce moment ils n'ont pas l'air très sympa, mais c'est tout à fait à vous de décider. L' autre chose que je voudrais que vous fassiez est une fois connecté, je veux que vous ajoutiez une nouvelle section ici qui permet à l'utilisateur de mettre à jour son prénom , son nom d'utilisateur, son mot de passe, et peut-être télécharger une image. Maintenant, si vous ne savez pas où commencer avec le téléchargement d'images, nous avons couvert cela dans Django 101. Donc, vous voudrez peut-être référencer que l'on est plus réellement récupéré tout cela dans Django 101, vous pouvez utiliser un formulaire modèle ou vous pouvez utiliser un formulaire régulier et mettre à jour manuellement les informations de l'utilisateur. Mais de toute façon, j'aimerais que vous créiez une nouvelle petite zone de compte ici où quelqu'un peut changer votre nom d'utilisateur, mot de passe, prénom, nom et son avatar. Cela va nécessiter un peu de googling, un peu de recherche, un peu de lecture des canards Django. Et tout cela est une expérience de la vie réelle parce qu'une fois que vous avez un emploi de développeur web, vous n'aurez plus votre portable. Et un client va dire, hé, j'ai besoin d'une caractéristique particulière. Et malheureusement, vous allez devoir aller et apprendre à comprendre comment résoudre cette fonctionnalité. Vous pourriez aussi bien avoir cette expérience dès maintenant pendant que vous apprenez. Et si vous voulez vraiment savoir ce que vous pouvez faire, c'est que vous pouvez essayer de rendre ce mobile réactif si vous êtes plus d'une personne frontale avec plus de connaissances frontales que de connaissances backend. Vous pouvez toujours essayer de faire de cette page une page responsive parce que pour le moment, je ne crois pas que ce soit réellement responsive si responsive du tout. Donc, il ne semble pas bon sur mobile, mais vous pourriez vouloir aller de l'avant et le faire regarder sur mobile. Lorsque vous avez fait cela, n'oubliez pas de partager votre projet avec le reste de la classe. Surtout moi. Je veux voir sur quoi tu travailles. Je veux voir comment ça se passe pour toi. Mais surtout, amusez-vous avec ça. Et n'oubliez pas de vous pousser. Il est important de vous pousser parce que c'est comme ça que vous grandissez. Et n'oubliez pas de partager votre projet final et votre résultat final avec le reste de la classe et surtout moi, j'aime vraiment voir le travail de tout le monde. Montrez-le ci-dessous. J' adorerais jeter un oeil.