Maison >développement back-end >Tutoriel Python >Python crée des serveurs Web et des frameworks Web pour les sites Web

Python crée des serveurs Web et des frameworks Web pour les sites Web

高洛峰
高洛峰original
2017-02-22 10:58:501969parcourir

J'ai déjà utilisé Django pour créer un petit site, mais je pensais que Django était trop encombrant, j'ai donc décidé de passer à un framework Web plus léger pour jouer avec. L'auteur de Web.py est décédé et le projet n'a pas été mis à jour depuis longtemps, je ne vais donc pas l'utiliser. Flask est également un framework Web léger et mature. Il existe de nombreuses étoiles et fourchettes sur github, et la documentation et les extensions sont également très riches.

La meilleure façon d'apprendre un framework est d'utiliser le framework pour réaliser un projet et de comprendre et maîtriser le framework en combat réel. Ici, j'utilise le framework Flask et la base de données Mysql pour créer un système de forum. Bien que le moineau soit petit, il possède tous les organes. Les rendus du forum sont les suivants :

Python 搭建Web站点之Web服务器与Web框架

Capture d'écran du système de forum

Voici les bases. fonctions du forum :

Module utilisateur complet (inscription, connexion, changement, récupération du mot de passe, modification des informations, notification des messages du site (création, réponse aux sujets, recherche sur le site, prise en charge des démarques, @) ; rappel de l'utilisateur) Gestion puissante de l'arrière-plan, prise en charge du blocage des utilisateurs, des sujets et des commentaires prenant en charge diverses conditions de recherche pour les sujets et les commentaires

Ce blog utilisera une série d'articles pour enregistrer le processus de création du système de forum, en espérant ; pour être utile aux étudiants qui débutent dans le développement Web.

On entend souvent parler de frameworks web en python comme Django et Flask Alors, qu'est-ce qu'un framework exactement ? Quelle est la différence entre un framework web et un serveur web (Nginx, Apache, etc.) ? utiliser également Python pour créer un site Web sans le framework ? Pour résoudre ces questions, nous devons comprendre le principe de fonctionnement du serveur Web et la nature du framework Web.

Serveur Web

Lorsque nous entrons l'URL dans le navigateur, le navigateur demandera d'abord au serveur DNS d'obtenir l'adresse IP du site demandé. Envoyez ensuite une requête HTTP à l'hôte avec l'IP, puis recevez la réponse HTTP du serveur Après le rendu, le navigateur nous la présente avec un meilleur effet. Dans ce processus, c'est le serveur Web qui contribue silencieusement en coulisses.

En termes simples, un serveur Web est un programme exécuté sur un serveur physique. Il attend en permanence que les clients (principalement les navigateurs, tels que Chrome, Firefox, etc.) envoient des requêtes. Lorsqu'une demande est reçue, elle génère une réponse correspondante et la renvoie au client. Le serveur Web communique avec le client via le protocole HTTP, il est donc également appelé serveur HTTP.

Python 搭建Web站点之Web服务器与Web框架

Serveur Web

Le principe de fonctionnement du serveur Web n'est pas compliqué et peut généralement être divisé en 4 étapes suivantes : établissement de la connexion, processus de demande, processus de réponse et fermeture de la connexion.

Établir une connexion : le client établit une connexion TCP avec le serveur via le protocole TCP/IP. Processus de requête : le client envoie un paquet de requête de protocole HTTP au serveur pour demander des documents de ressources sur le serveur. Processus de réponse : le serveur envoie un paquet de réponse au protocole HTTP au client. Si la ressource demandée contient du contenu de langage dynamique, le serveur appellera le moteur d'interprétation de langage dynamique pour traiter le « contenu dynamique » et renvoyer les données traitées au client. Le document HTML est interprété par le client et le résultat graphique est restitué sur l'écran du client. Fermer la connexion : Le client est déconnecté du serveur.

Implémentons un serveur Web simple. Après avoir exécuté l'exemple de programme, il écoutera le port local 8000 et vous pourrez voir le contenu de la réponse en accédant à http://www.php.cn/:8000 dans le navigateur. Et notre programme peut également imprimer le contenu de la demande envoyée par le client, comme indiqué ci-dessous :

Python 搭建Web站点之Web服务器与Web框架

Serveur Web simple

Ici La requête et la réponse doivent être conformes au protocole HTTP. Pour plus de détails sur le protocole HTTP, vous pouvez lire le « Guide faisant autorité HTTP » ou lire le contenu HTTP que j'ai compilé.

Bien que la tâche principale du serveur Web soit de renvoyer une réponse en fonction de la requête, le serveur Web réel est beaucoup plus compliqué que l'exemple ci-dessus car il y a trop de facteurs à prendre en compte, tels que :

Mécanisme de mise en cache : parlez de la mise en cache de certaines pages fréquemment visitées pour améliorer la vitesse de réponse ; Sécurité : empêchez diverses attaques de pirates, telles que les attaques SYN Flood ; Traitement simultané : comment répondre aux demandes lancées par différents clients en même temps ; Journal : enregistrez la date de la visite pour faciliter certaines analyses.

Les serveurs Web gratuits les plus utilisés actuellement sous les plateformes UNIX et LINUX sont Apache et Nginx.

Application Web

Le serveur Web accepte la requête Http et renvoie la réponse. Dans de nombreux cas, la réponse n'est pas un fichier statique, une application doit donc générer une réponse correspondante basée sur la requête. Les applications ici sont principalement utilisées pour traiter la logique métier associée, lire ou mettre à jour la base de données et renvoyer les réponses correspondantes en fonction de différentes requêtes. Notez que ce n'est pas le serveur Web lui-même qui fait cela. Il est uniquement responsable du niveau du protocole HTTP et de certains éléments associés tels que le traitement de la concurrence, la sécurité, la journalisation, etc.

Les applications peuvent être écrites dans différents langages (Java, PHP, Python, Ruby, etc.). Cette application recevra la demande du client du serveur Web. Après traitement, elle renverra la réponse au. Serveur Web. Enfin, le serveur Web revient au client. L'architecture entière est la suivante :

Python 搭建Web站点之Web服务器与Web框架

Application Web

Prenons Python comme exemple Utiliser Python pour développer le Web. de la manière la plus originale et la plus directe, il utilise le standard CGI, très populaire en 1998. Assurez-vous d'abord que le serveur Web prend en charge CGI et a configuré un gestionnaire CGI, puis configurez le répertoire CGI, ajoutez le fichier python correspondant dans le répertoire, chaque fichier python traite l'entrée correspondante et génère un fichier html, comme indiqué dans ce qui suit. exemple :

# !/usr/bin/python 
# -*- coding: UTF-8 -*- 
print "Content-type:text/html" 
print # 空行,告诉服务器结束头部 
print &#39;<html>&#39; 
print &#39;<head>&#39; 
print &#39;<meta charset="utf-8">&#39; 
print &#39;</head>&#39; 
print &#39;<body>&#39; 
print &#39;<h2>Hello Word! 我是一个CGI程序</h2>&#39; 
print &#39;</body>&#39; 
print &#39;</html>&#39;

De cette façon, vous pouvez obtenir un simple contenu de page Web Hello World en accédant au fichier dans le navigateur. Écrire des applications Web directement via CGI semble simple, chaque fichier gère l'entrée et génère du HTML. Cependant, dans le développement réel, vous risquez de rencontrer de nombreux inconvénients. Par exemple :

Chaque script CGI indépendant peut écrire à plusieurs reprises du code de connexion et de fermeture de base de données ; les développeurs back-end verront un tas de types de contenu et d'autres éléments de page HTML qui n'ont rien à voir avec eux-mêmes ; Web Framework

Au début, beaucoup de travail répétitif a été effectué pour développer le site. Plus tard, afin de réduire la duplication et d'éviter d'écrire du code complexe et déroutant, les gens ont extrait les processus clés du Web. développement et développement de divers frameworks Web. Avec un framework, vous pouvez vous concentrer sur l’écriture de code clair et facile à maintenir sans avoir à vous soucier des tâches répétitives telles que les connexions à des bases de données.

L'un des frameworks web les plus classiques adopte l'architecture MVC, comme le montre la figure ci-dessous :

Python 搭建Web站点之Web服务器与Web框架

Architecture MVC

L'utilisateur saisit l'URL, le client envoie une demande, le contrôleur (Contrôleur) recevra d'abord la demande, puis utilisera les modèles (Modèles) pour récupérer toutes les données requises de la base de données, effectuera le traitement nécessaire et enverra les résultats traités à la vue (View), la vue utilise les données obtenues pour restituer et générer une réponse HTML et la renvoie au client.

Prenons l'exemple du framework Web Python Flask. Le framework lui-même ne limite pas l'architecture que nous utilisons pour organiser nos applications, mais Flask peut bien prendre en charge l'organisation des applications de manière MVC.

Contrôleur : flask Vous pouvez utiliser des décorateurs pour ajouter des éléments de routage, comme suit :

@app.route(&#39;/&#39;) 
def main_page(): 
  pass

Modèle : principalement utilisé pour extraire ce qui est Données nécessaires, telles qu'utilisées dans la fonction suivante :

@app.route(&#39;/&#39;) 
def main_page(): 
  """Searches the database for entries, then displays them.""" 
  db = get_db() 
  cur = db.execute(&#39;select * from entries order by id desc&#39;) 
  entries = cur.fetchall() 
  return render_template(&#39;index.html&#39;, entries=entries)

View : flask utilise jinja2 pour afficher la page. Le fichier modèle suivant spécifie le style de la page. page :

{% for entry in entries %} 
<li> 
 <h2>{{ entry.title }}</h2> 
 <p>{{ entry.text|safe }}</p> 
</li> 
{% else %} 
<li><em>No entries yet. Add some!</em></li> 
{% endfor %}

On sait que Python possède de nombreux frameworks Web, et en même temps il possède de nombreux serveurs Web (Apache, Nginx, Gunicorn, etc. .), entre frameworks et serveurs Web Une communication doit s'effectuer entre eux. S'ils ne peuvent pas correspondre au moment de la conception, alors le choix d'un framework limitera le choix des serveurs Web, ce qui est évidemment déraisonnable.

Alors, comment vous assurer que vous pouvez utiliser le serveur de votre choix et faire correspondre plusieurs frameworks réseau différents sans modifier le code du serveur Web ou le code du framework réseau ? utiliser. Suivez simplement l’interface. Pour python, il s'agit de WSGI (Web Server Gateway Interface, Web Server Gateway Interface). D'autres langages de programmation ont des interfaces similaires : l'API Servlet de Java et Ruby's Rack, par exemple.

L'émergence de Python WSGI permet aux développeurs de séparer le choix du framework web et du serveur web, sans plus se limiter. Vous pouvez désormais véritablement mélanger et assortir différents serveurs Web et frameworks Web pour choisir la combinaison qui répond à vos besoins. Par exemple, vous pouvez utiliser Gunicorn ou Nginx/uWSGI pour exécuter des applications Django, Flask ou web.py.

Python 搭建Web站点之Web服务器与Web框架

Pour plus d'articles liés au serveur Web de Python et au framework Web pour créer un site Web, veuillez faire attention au site Web chinois PHP !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn