web-dev-qa-db-fra.com

Comment utiliser python comme langage côté serveur?

J'essaie d'utiliser Python au lieu de PHP (uniquement à des fins éducatives). Je teste mes pages Web sur XAMPP et j'ai déjà ajouté python et cgi aux configs. J'ai réussi à faire une page web très basique avec ce code

#!/Python/python

print("Content-Type: text/plain;charset=utf-8")
print()

print("Hello World!")

Mais c'est tout. Je ne trouve aucune information sur la façon exacte de servir des pages Web avec Python 3+. La plupart des informations sont obsolètes ou controversées. Existe-t-il un guide à jour sur la façon d'utiliser Python comme langage côté serveur?

12
Barsik the Cat

Ce que Nicarus a dit était une suggestion valable, mais je recommande également d'autres choses.

Tout d'abord, pour votre environnement de développement, vous n'aurez pas besoin d'utiliser xampp ou wamp ou de telles choses, python a son propre serveur HTTP, bien que ce ne soit pas la chose la plus simple à utiliser, les bibliothèques et les frameworks que je vais utiliser) expliquer la prochaine utilisation.

Ainsi, la plupart des développeurs Web python n'utilisent pas python pour utiliser python comme langage de programmation pour le Web). La plupart des développeurs utilisent un cadre ou une bibliothèque de quelque sorte. Ces cadres vont de plutôt lourds et d'opinion, comme Django, à des plus petits comme Flask. La plupart, sinon tous, de ces cadres fournissent une sorte de moyen simple et rapide de configurer un serveur HTTP de développement pour les tests.

Je recommanderais de chercher Django d'abord car il a les tutoriels et les guides les plus complets pour vous aider à démarrer. Ensuite, ceux que vous êtes plus à l'aise dans le Python langue, vous pouvez assez facilement utiliser autre chose avec moins de main.

Avec Django vous pouvez commencer ici

5
Blanen

Python peut être un excellent langage de serveur secondaire, mais pas de la manière PHP l'est. Il est fortement recommandé d'utiliser un framework, comme flask).

Dans PHP vous avez différents fichiers .php (comme index.php) qui font un routage de base, mais dans python (avec Flask et aussi quelques autres frameworks), vous devez définir le chemin URI dans la fonction.

Vous pouvez voir ici un exemple, à partir de sa page Web Flask

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Et si vous recherchez une API REST, jetez un œil à Falcon

2
fernandezr

Aux fins que vous mentionnez, cette configuration actuelle devrait fonctionner (au moins pendant un certain temps):

Configuration Apache

Changements dans httpd.conf

  1. Changer refusé en accordé

<Directory /> AllowOverride none Require all granted </Directory>

  1. Recherchez Options + Index + FollowSynsLinks ........ et ajoutez + ExecCGI à cette ligne.

Options +Indexes +FollowSymLinks +Multiviews +ExecCGI

  1. Recherchez AddHandler cgi-script .cgi et ajoutez . Py à celui-ci

AddHandler cgi-script .cgi .py

Changements dans httpd-vhosts.conf

<Directory "{Your directory}"/> Options +Indexes +Includes +FollowSymLinks +MultiViews +ExecCGI AllowOverride All Require all granted </Directory>


exemple.py

Première ligne de Python code #!C:\{somepath}\python

Vous devez trouver chemin droit et convention de barre (/, \, // ...) pour la première et la ligne de code commentée. Dans votre exemple: #!/Python/python

Exécutez ce script.py pour le trouver

import sys print(sys.executable)

Collez la sortie à côté de #! Et vous devriez pouvoir tester votre test-code.py dans dans votre dossier ** www\Si cela se produit, cela ne fonctionne pas. , essayez différentes combinaisons de python, python.exe avec différentes conventions de barre comme "/" "//" "\" à côté de la ligne #!.

Pour afficher un fichier HTML, ajoutez print ('Content-type: text/html\n\n') à votre code .py. **

Code complet
Remarque f sur html_content = f'''<html>...

#!C:\Program Files (x86)\Python37-32\python
#  -*- coding: utf-8 -*-
import cgi

stringvar = 'Hello variable'
intvar = 30
html_content = f'''<html>
<head><title>My first Python CGI app</title></head>
<body>
<p>Hello, 'world'!</p>
<p>This is a stringvar = {stringvar} </p>
<p>This is intvar = {intvar} </p>
</body>
</html>'''

print ('Content-type: text/html\n\n')
print (html_content)

"La plupart des informations sont obsolètes ou controversées"

Entièrement d'accord. J'espère que ça marche!

1
Bernard