Python from Scratch - Créez un site Web dynamique

Nous avons couvert pas mal de Python dans les tutoriels précédents de cette session. Aujourd'hui, nous allons combiner tout ce que nous avons appris jusqu'à présent pour construire un site Web dynamique avec Python..


Préférer un tutoriel vidéo?

Regardez plus de tutoriels vidéo sur YouTube.

Alors, comment avez-vous commencé à créer des sites Web avec Python? Eh bien, vous pouvez tout faire vous-même et écrire un programme qui s'exécute sur un serveur Web, acceptant les demandes de page et fournissant des réponses sous forme de HTML et d'autres ressources. Cependant, cela représente beaucoup de travail, alors pourquoi s’attaquer à tous les problèmes alors qu’il existe de nombreux outils pour faire le travail à votre place? Ces outils s'appellent des frameworks, et ce sont ce que nous utiliserons aujourd'hui pour créer notre site web.

Cadres Python

Il existe de nombreux frameworks Web Python, mais voici certains des meilleurs:

  • Django - Nous allons utiliser cela aujourd'hui. Il a un énorme ensemble de fonctionnalités, mais reste simple à utiliser. La documentation est également excellente. Ainsi, si vous êtes bloqué, vous aurez plus de facilité à résoudre votre problème avec Django..
  • Grok - Un autre framework avec un ensemble de fonctionnalités qui se rapproche de Django. Si vous décidez que vous ne préférez pas Django, c'est une bonne alternative.
  • WebPy - Un cadre beaucoup plus léger. Il n’a pas autant de fonctionnalités que Reddit pendant un certain temps.!
  • TurboGears - Bien que réputé pour sa médiocre documentation, TurboGears s’est considérablement amélioré au cours de la dernière année..

Une liste plus complète peut être trouvée sur le site Web de Python si vous avez besoin d'options supplémentaires. Aujourd'hui, nous allons configurer Django pour le développement sur une machine locale, puis créer un blog simple. Nous allons également passer en revue le processus d'installation sur un serveur Web distant..


Installer Django

Nous allons effectuer l'essentiel de notre travail aujourd'hui dans le terminal. Cela devrait tous fonctionner sur Mac et Linux; Cependant, si vous utilisez Windows, le processus est quelque peu différent. Une connaissance de la ligne de commande n'est pas nécessaire si vous écrivez uniquement en Python. Toutefois, si vous prévoyez d'utiliser Django ou de gérer un site Web dynamique en général, cela vaut la peine d'apprendre.

Tutoriels Terminal

Pensez à consulter ces tutoriels pour vous familiariser avec le terminal..

  • Une introduction au travail dans le terminal, qui couvre aussi Git et Github.
  • 10 astuces pour travailler plus vite dans le terminal.

Voici les commandes dont vous avez besoin pour installer Django. Il n'est pas compatible avec Python 3, vous devez donc installer la version 2.7 ou une version antérieure pour le faire fonctionner..

 wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 setup.py d'installation

Ensuite, nous pouvons éventuellement supprimer les fichiers d'installation.

 cd… rm Django-1.3.1.tar.gz

Ça devrait le faire! Testons-le.

 python depuis django import get_version get_version ()

Vous devriez voir '1.3.1'. Si vous le faites, tout a fonctionné et Django est installé sur votre système. Toutes nos félicitations! Nous sommes prêts à commencer à créer notre site!


Construire notre blog

Nous allons créer un système de blog aujourd'hui, car c'est un excellent moyen d'apprendre les bases. Tout d'abord, nous devons créer un projet Django.

cd ~ / Documents / Projets django-admin.py startproject FirstBlog cd FirstBlog ls

Que fait chacun de ces fichiers?

  • __init__.py indique à Python que ce dossier est un paquet Python. Nous avons appris à ce sujet dans la troisième leçon; cela permet à Python d'importer tous les scripts du dossier en tant que modules.
  • gérer.py ne fait pas réellement partie de votre site web; c'est un script utilitaire que vous exécutez à partir de la ligne de commande. Il contient un ensemble de fonctions permettant de gérer votre site..
  • settings.py contient les paramètres de votre site Web. Django n'utilise pas de fichiers XML pour la configuration; tout est en Python. Ce fichier est simplement un nombre de variables qui définissent les paramètres de votre site..
  • urls.py est le fichier qui mappe les URL vers les pages. Par exemple, il pourrait mapper votrewebsite.com/about à un À propos de nous page.

Django se réfère à lui-même à un framework MTV, qui signifie Model Model View.

applications

Cependant, aucun de ces fichiers ne constitue à lui seul un site Web fonctionnel. Pour cela, nous avons besoin d'applications. Les applications sont l'endroit où vous écrivez le code qui rend votre site Web fonctionnel, mais avant de les examiner, nous devons comprendre un peu les principes de conception de Django..

Premièrement, Django est un framework MVC, qui signifie Model View Controller. Django se réfère à lui-même à un framework MTV, qui signifie Model Model View. C'est une approche légèrement différente de celle de MVC, mais fondamentalement, elles sont assez similaires. Quoi qu'il en soit, MVC est un modèle architectural qui fournit une méthode pour structurer vos projets. Il sépare le code utilisé pour traiter les données de celui qui gère l'interface utilisateur..

Django adhère à la philosophie DRY ou "Ne vous répétez pas".

Deuxièmement, Django adhère à la philosophie DRY, ou Don't Repeat Yourself, ce qui signifie que vous ne devriez jamais écrire de code qui exécute une tâche donnée plus d'une fois. Par exemple, dans notre blog, si nous écrivions une fonctionnalité qui sélectionnait un article au hasard dans les archives et l'implémentait sur plusieurs pages, nous ne le coderions pas à chaque fois que nécessaire. Nous le coderions une fois, puis l'utiliserions sur chaque page.

Alors, comment cela se rapporte-t-il aux applications? Les applications vous permettent d’écrire votre site Web dans un style DRY. Chaque projet, comme celui que nous avons ici, peut contenir plusieurs applications. Inversement, chaque application peut faire partie de plusieurs projets. En utilisant l'exemple de tout à l'heure, cela signifie que si nous créions un autre site à l'avenir qui nécessitait également une fonctionnalité de page aléatoire, nous n'aurions pas à l'écrire à nouveau. Nous pourrions simplement importer l'application de ce projet. Pour cette raison, il est important que chaque application serve un objectif distinct. Si vous écrivez toutes les fonctionnalités de votre site dans une application et que vous devez ensuite en utiliser une partie ultérieurement, vous devez tout importer. Si vous réalisiez un site Web de commerce électronique, par exemple, vous ne voudriez pas importer toutes les fonctionnalités du blog. Toutefois, si vous créez une application pour la fonctionnalité aléatoire et une application pour le système de publication de blogs, vous pouvez choisir les bits dont vous avez besoin..

Cela signifie également que sur le site, le code est bien organisé. Si vous souhaitez modifier une fonctionnalité, vous n'avez pas à rechercher dans un fichier volumineux; vous pouvez plutôt naviguer vers l'application pertinente et la modifier sans vous soucier d'interférer avec quoi que ce soit d'autre.

python mangage.py blog startapp cd blog ls

Encore une fois, nous avons un __init__.py fichier pour en faire un package, et trois autres fichiers: modèles, tests et vues. Nous n'avons pas besoin de nous soucier des tests pour l'instant, mais les deux autres sont importants. Les modèles et les vues sont les M et V parties de MVC.

Dans les modèles, nous définissons nos structures de données.

Si vous avez déjà travaillé avec PHP auparavant, vous avez peut-être utilisé PhpMyAdmin pour créer vos tables MySQL, puis écrit manuellement vos requêtes SQL dans vos scripts PHP. À Django, c'est beaucoup plus facile. Nous définissons toutes les structures de données dont nous avons besoin dans ce fichier de modèles, puis exécutons une commande et toutes les bases de données nécessaires sont créées pour nous..

Lorsque vous souhaitez accéder à ces données, vous passez par ces modèles en appelant une méthode, au lieu d’exécuter des requêtes brutes. Ceci est très utile, car Django peut utiliser plusieurs programmes de base de données. Nous allons utiliser MySQL aujourd'hui, car c'est le logiciel le plus puissant, et c'est ce que la plupart des hôtes fournissent, mais si nous devions changer de base de données à l'avenir, tout le code serait toujours valide! Dans d'autres langues, si vous voulez passer à SQLite ou à quelque chose de similaire, vous devez réécrire le code qui accède à votre base de données..

Dans le fichier views, nous écrivons le code qui génère les pages Web. Cela lie toutes les autres parties ensemble. Lorsqu'un utilisateur tape une URL, celle-ci est envoyée par le les urls script que nous avons vu plus tôt à la vues script, qui récupère ensuite les données pertinentes dans les modèles, les traite et les transmet à un modèle, qui est finalement affiché comme la page que l'utilisateur voit. Nous allons examiner ces modèles sous peu. Ils sont la partie la plus facile - principalement HTML.

Pour un blog, nous aurons besoin d'un tableau d'articles, avec plusieurs champs pour le titre, le corps du texte, l'auteur, l'heure à laquelle il a été écrit, etc. Un vrai blog aurait des commentaires, mais cela dépasse le cadre de la démo d'aujourd'hui.

à partir de django.db import des modèles de classe (posts.Model): author = models.CharField (max_length = 30) title = models.CharField (max_length = 100) bodytext = models.TextField () timestamp = models.DateTimeField ()

MySQL

Ces modèles ne sont qu'une description. Nous devons créer une base de données à partir d’eux. Cependant, nous devons d’abord utiliser MySQL sur notre système. Sur un serveur Web réel, cela ne poserait pas de problème, car ils l'ont généralement préinstallé. Heureusement, avec un gestionnaire de paquets, c'est facile à installer. Tout d'abord, vous devez installer Homebrew et Easy Install

brew installer mysql easy_install mysql-python mysqld_safe --skip-grant-tables #l'importe qui a des autorisations complètes mysql -u root UPDATE mysql.user SET Mot de passe = PASSWORD ('nettuts') WHERE User = "root"; # donnez un mot de passe à l'utilisateur 'root' FLUSH PRIVILEGES; mysql -u root -p #log avec notre mot de passe 'nettuts' CREATE DATABASE firstblog; quitte python2.6 manage.py runserver

Lorsque vous redémarrez, MySQL ne fonctionnera pas. Par conséquent, chaque fois que vous devrez le faire, exécutez mysqld pour démarrer le serveur. Vous pouvez ensuite courir python2.6 manange.py serveur d'exécution dans un nouvel onglet pour démarrer le serveur de développement.

Cette commande n'exécutera pas encore le serveur, elle renverra simplement une erreur. C'est parce que nous devons configurer nos paramètres. Jetons un coup d'oeil à settings.py.

Vous devez d'abord modifier les paramètres de la base de données. Ceux-ci commencent à la ligne douze.

BASES DE DONNEES = 'défaut': 'ENGINE': 'django.db.backends.mysql', # Ajouter 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' ou 'oracle'. 'NAME': 'firstblog', # Ou chemin d'accès au fichier de base de données si vous utilisez sqlite3. 'USER': 'root', # Non utilisé avec sqlite3. 'PASSWORD': 'nettuts', # Non utilisé avec sqlite3. 'HOST': ", # Définit la chaîne vide pour localhost. Non utilisé avec sqlite3. 'PORT':", # Définit la chaîne vide par défaut. Non utilisé avec sqlite3. 

Si vous essayez de réexécuter le serveur, cela devrait fonctionner, à condition que vous ayez correctement installé MySQL. Si vous visitez 127.0.0.1:8000 dans votre navigateur Web, vous devriez voir la page Django par défaut.

Maintenant, transformons notre site Django en un blog. Premièrement, nous devons utiliser nos modèles pour créer des tables dans la base de données en exécutant la commande suivante:

python2.6 manage.py syncdb

Chaque fois que vous modifiez vos modèles, vous devez exécuter cette commande pour mettre à jour la base de données. Notez que cela ne peut pas modifier les champs existants; il ne peut qu'en ajouter de nouveaux. Donc, si vous voulez supprimer des champs, vous devrez le faire manuellement avec quelque chose comme PhpMyAdmin. Comme c'est la première fois que nous exécutons la commande, Django configurera toutes les tables intégrées par défaut pour des éléments tels que le système d'administration. Il suffit de taper "oui" puis de renseigner vos coordonnées.

Maintenant, mettons en place le urls.py fichier. Décommentez la première ligne de la section exemples et changez-la pour indiquer url (r '^ $', 'FirstBlog.blog.views.home', name = "home") .

Maintenant, créons le fichier de vues pour répondre à ces demandes.

depuis django.shortcuts import render_to_response depuis blog.models import posts def home (requête): return render_to_response ('index.html')

Modèles

Ce index.html Le fichier n'existe pas encore, alors faisons-le. Créez un dossier, appelé modèles dans le Blog app et enregistrer un fichier appelé index.html, qui peut simplement contenir "Hello World" pour le moment. Ensuite, nous devons éditer le fichier de paramètres pour que Django sache où se trouve ce modèle.

La ligne 105 est l'endroit où commence la section de déclaration des dossiers de modèles; alors ajustez-le, comme ceci:

TEMPLATE_DIRS = ("blog / templates", # insérez des chaînes ici, comme "/ home / html / django_templates" ou "C: / www / django / templates". # Utilisez toujours des barres obliques, même sous Windows. # N'oubliez pas utiliser des chemins absolus, pas des chemins relatifs.)

Si vous exécutez à nouveau le serveur et actualisez la page dans votre navigateur, le message "Hello World" devrait s'afficher. Nous pouvons maintenant commencer à présenter notre blog. Nous allons ajouter du code HTML standard pour la page d'accueil.

      Premier blog   

Premier blog

Titre

Publié le date par auteur

Le corps du texte

Si vous enregistrez et actualisez la page, vous devriez voir que la page a été mise à jour avec ce nouveau contenu. L'étape suivante consiste à ajouter du contenu dynamique à partir de la base de données. Pour ce faire, Django utilise un langage de modèles qui vous permet d’incorporer des variables avec des accolades. Modifiez la partie centrale de votre page pour qu'elle ressemble à ceci:

Premier blog

Titre

Publié le date par author

body

Nous pouvons ensuite passer des valeurs à ces espaces réservés variables de la views.py déposer en créant un dictionnaire de valeurs.

from django.shortcuts import render_to_response de blog.models import posts def home (demande): content = 'titre': 'Mon premier message', 'auteur': 'Giles', 'date': '18 septembre 2011', ' body ':' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam cursus tempus dui, vulgariser nisl eleifend eget. Justin felis, dapibus quis vulputate at, porta et dolor. Praesent enim libero, malesuada nec vestibulum vitae, fermentum nec ligula. Etiam eget convallis turpis. Donec non sem justo. ', Return render_to_response (' index.html ', contenu)

Enregistrez et actualisez, et vous devriez voir que vous passez maintenant du contenu à un modèle à partir de votre fichier de vues. La dernière étape consiste à récupérer les données de notre base de données et à les transmettre à la place. Heureusement, nous pouvons faire tout cela sans requêtes SQL, en utilisant les modèles de Django. Nous devons ajouter notre Blog application à notre FirstBlog projet en modifiant un autre paramètre. Aller à INSTALLED_APPS à la ligne 112, et ajoutez le

'FirstBlog.blog',

à la liste.

Puis change views.py donc il ajoute des données de la base de données.

from django.shortcuts import render_to_response from blog.models import posts def home (demande): entries = posts.objects.all () [: 10] renvoie render_to_response ('index.html', 'posts': entrées)

Ensuite, mettez à jour le modèle pour accéder à ces données.

Premier blog


% pour post in posts%

titre de l'article

Publié le post.timestamp par post.author

post.bodytext


% endfor%

Ici, nous pouvons accéder à toutes les données de notre tableau dans le views.py fichier, puis sélectionnez uniquement les dix premières entrées. Nous passons ces données dans le modèle, parcourons les entrées et affichons les données avec le code HTML de notre site. Cela ne fonctionnera pas encore car il n'y a rien dans la base de données. Arrêtez le serveur et lancez:

python2.6 manage.py syncdb

Cela ajoutera la nouvelle table pour nos publications à la base de données. Ensuite, ouvrez un nouvel onglet et tapez:

mysql -u root -p

… Tapez votre mot de passe, appuyez sur Entrée et exécutez:

INSERT INTO blog_posts (auteur, titre, corps du texte) valeurs ('Bob', 'Hello World', 'Lorem Ipsum');

Retournez à l'onglet précédent et exécutez à nouveau le serveur. Actualisez la page et vous devriez voir un article de blog avec le contenu factice que vous venez d'ajouter. Si vous exécutez la commande MySQL plusieurs fois de plus, vous devriez voir plus de messages apparaître sur la page lorsque vous actualisez.

Le système d'administration de Django

La dernière chose à faire aujourd'hui est de revoir le système d'administration de Django. C'est une fonctionnalité très puissante de Django qui vous permet de gérer votre site sans écrire plus de code, comme vous le feriez si vous créiez un site à partir de rien. Pour l'activer, nous devons modifier quelques paramètres. Tout d’abord, décommentez les lignes 4, 5, 13 et 16 dans urls.py, afin que vous puissiez réellement accéder à la page d'administration. Ensuite, allez au INSTALLED_APPS section de settings.py et décommenter 'django.contrib.admin', et 'django.contrib.admindocs',. Pour laisser l’administrateur contrôler votre des postes table, créez un nouveau fichier appelé admin.py dans le Blog dossier et ajoutez les lignes suivantes:

depuis django.contrib import admin depuis blog.models import posts admin.site.register (posts)

Courir python2.6 manage.py syncdb à nouveau pour ajouter les tables de la section admin et redémarrer le serveur.

Si vous visitez 127.0.0.1:8000/admin Maintenant, dans votre navigateur, vous devriez voir une page de connexion. Utilisez les détails que vous avez choisis précédemment lors de la première exécution du syncdb pour vous connecter. Vous devriez voir une section, appelée Blog, avec un sous-titre pour le des postes table. Vous pouvez l'utiliser pour créer, éditer et supprimer des articles de blog avec une interface simple.

C'est tout ce qu'il y a à faire. Vous venez de créer un blog entièrement fonctionnel, bien que simple. Pour terminer cette leçon, nous allons examiner l’installation de Django sur un serveur Web..


Installation sur un serveur Web

Il existe deux types d’hébergement Web, et celui que vous avez déterminera si vous pouvez utiliser Django. Si vous avez partagé l'hébergement, vous êtes entièrement à la merci de votre hôte.

De nombreux hébergeurs web bon marché ne supportent pas Python. Bien que PHP soit presque garanti, le support pour d'autres langues ne l'est souvent pas. Vous devrez vérifier le panneau de contrôle pour déterminer si Python (et Django) sont disponibles. Évidemment, le processus est légèrement différent avec chaque hôte. Presque tout l’hébergement fonctionne sur Apache, et nous pouvons l’utiliser pour héberger Django, en utilisant la mod_wsgi ou mod_python Modules Apache.

La plupart des hôtes Web exécutent des scripts dans plusieurs langues à l'aide de CGI. Django peut fonctionner sur FastCGI et, théoriquement, sur CGI, mais cela n’est pas officiellement pris en charge et serait beaucoup trop lent pour un site Web de production réel. Vous devrez vérifier si ceux-ci sont installés. Ils se trouvent généralement sous un en-tête, comme «Support de CGI et du langage de script»..

Si vous avez un hébergement VPS ou si vous avez la chance d'avoir un serveur dédié, votre vie est beaucoup plus facile. Celles-ci sont généralement fournies avec Python préinstallé, et à partir de là, il vous suffit de suivre les mêmes étapes que celles suivies pour obtenir une copie locale de Django en cours d'exécution. Si vous n'avez pas Python, vous pouvez l'installer avec un gestionnaire de paquets. Votre système peut même venir avec Django.

ssh [email protected] wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 setup.py d'installation python

Une fois que vous avez installé Django sur votre serveur, téléchargez le site que vous venez de créer en utilisant n’importe quel client de transfert de fichier. Vous pouvez mettre les fichiers n’importe où, mais gardez-les en dehors de la Publique dossier, ou n'importe qui pourra voir le code source de votre site. j'utilise /maison pour tous mes projets.

Ensuite, créez une base de données MySQL, appelée 'firstblog' sur votre serveur et lancez syncdb encore. Vous devrez créer à nouveau votre compte pour le panneau de configuration de l'administrateur, mais il s'agit d'une opération ponctuelle..

Si vous essayez de l'exécuter, vous risquez de recevoir une erreur, car les paramètres du serveur sont différents de ceux de votre ordinateur local. Vous devrez peut-être changer le mot de passe de la base de données dans settings.py, Toutefois, en fonction de la configuration de votre serveur, vous pouvez également rencontrer d’autres problèmes. Google est votre ami dans ces situations!

Pour exécuter le serveur cette fois, la commande est légèrement différente. Vous devez spécifier une adresse IP et un port pour pouvoir accéder au site par Internet..

python manage.py runserver 0.0.0.0:8000

Si vous visitez votre site dans un navigateur Web, sur le port 8000, vous devriez voir votre site.!


Conclusion

C'est tout pour cette leçon… et notre série. J'espère que vous avez acquis un certain nombre de compétences utiles au cours de ces cinq dernières leçons et que vous êtes prêt à continuer et à apprendre encore plus de Python à l'avenir. Si vous aimez le look de Django et souhaitez continuer à approfondir votre connaissance du framework, voici quelques tutoriels supplémentaires sur le sujet..

  • Plonger dans Django
  • Faire une liste de tâches
  • 10 astuces Django utiles

Comme toujours, je suis heureux de discuter des questions concernant ce didacticiel ou de Python en général. Merci d'avoir lu.

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..