Il existe d'innombrables frameworks Web en Python, depuis les petites architectures de base jusqu'aux architectures complètes, et ils ont leurs propres avantages. Vous êtes donc prêt à l'utiliser pour faire du développement Web, mais avant d'entrer dans les détails, commençons par le début.
Objectif
Créer un site Web de visualisation d'images en utilisant les ressources d'images riches existantes
python3
flask : un framework de serveur Web python open source
jinja2 : le moteur de modèles par défaut de flask
pycharm recommandé
python nous fournit une interface : WSGI : Web Server Gateway Interface
Il nécessite uniquement aux développeurs web d'implémenter une fonction pour répondre aux requêtes HTTP. Sans toucher aux connexions TCP, aux formats de requêtes brutes HTTP et de réponses.
Ce qui suit est un exemple de l'application Web la plus simple :
# hello.pydef application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello, Python web!</h1>']# server.py# 从wsgiref模块导入:from wsgiref.simple_server import make_server# 导入我们自己编写的application函数:from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:httpd = make_server('', 8000, application) print('Serving HTTP on port 8000...')# 开始监听HTTP请求:httpd.serve_forever()
environ : un objet dict contenant toutes les informations de la requête HTTP
start_response : Une fonction qui envoie une réponse HTTP.
Placez les deux scripts dans le même répertoire, exécutez server.py et visitez http://127.0.0.1:8000 pour voir l'effet.
En fait, les applications Web sont le traitement de différentes URL.
Nous modifierons hello.py
def application(environ, start_response): method = environ['REQUEST_METHOD'] path = environ['PATH_INFO'] if method=='GET' and path=='/': return handle_home(environ, start_response) if method=='POST' and path='/signin': return handle_signin(environ, start_response) ...
Cela gérera deux URL, '/' et '/signin'
Bien sûr, vous pouvez continuer à écrire comme ça... si vous ne le faites pas. Cela ne vous dérange pas si vous êtes fatigué.
Comme la méthode ci-dessus est trop fatigante et lente, apprenons quelque chose de avancé :
flask
Regardez le code
from flask import Flaskfrom flask import request app = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home(): return '<h1>Home</h1>'@app.route('/signin', methods=['GET'])def signin_form(): return '''<form action="/signin" method="post"> <p><input name="username"></p> <p><input name="password" type="password"></p> <p><button type="submit">Sign In</button></p> </form>'''@app.route('/signin', methods=['POST'])def signin(): # 需要从request对象读取表单内容: if request.form['username']=='admin' and request.form['password']=='password': return '<h3>Hello, admin!</h3>' return '<h3>Bad username or password.</h3>'if __name__ == '__main__': app.run()
Notez qu'il s'agit d'un seul fichier.
Analysons ce script :
Flask associe automatiquement les URL aux fonctions en interne via les décorateurs Python. Une fois que
commence à s'exécuter, nous visitons
'/', et la page que nous voyons est un mot "HOME"
'/signin'. À ce moment-là, nous y accédons via GET, et nous voyons un formulaire. , remplissez « admin » et « mot de passe », cliquez pour vous connecter——>
'/signin', maintenant accessible via POST, ce que vous voyez est Bonjour, administrateur ou mauvais nom d'utilisateur ou mot de passe
Pour ceux qui ne connaissent pas GET Pour les étudiants disposant de formulaires POST et HTML, il est recommandé d'apprendre les bases du HTML.
Mais cela reste encore un peu rigide. Tout le contenu que les utilisateurs voient lors de l'accès doit être écrit et ne peut pas être réutilisé, ce qui est trop gênant
Le modèle résout notre problème ci-dessus. Regardez d'abord un morceau de code
from flask import Flask, request, render_templateimport os app = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home(): path = '/' all_file = os.listdir(path) return render_template('home.html',all_file = all_file)if __name__ == '__main__': app.run()
Ici, les noms de tous les fichiers du répertoire racine sont lus et transmis à la page du modèle HTML
Ensuite, le répertoire des modèles est créé dans le même répertoire que .py , notre modèle est stocké ici. La particularité du modèle est que vous pouvez utiliser des instructions et des variables python pour écrire des instructions dans
home.html
{% for i in all_file %} <a href="/page/{{ i }}">{{ i }}</a>{% endfor %}
, donc le résultat final est que plusieurs balises seront générées, et le nom de la balise est le nom du répertoire. .
Le tutoriel de base ci-dessus fait référence à Liao Xuefeng.
Ainsi, les bases sont terminées, et la prochaine étape sera le produit fini :
Produit fini
#beautiful_pic.pyfrom flask import Flaskfrom flask import requestfrom flask import render_templateimport os app = Flask(__name__)#显示所有文件夹@app.route('/',methods=['GET','POST'])def list_all(): path = './static/mzitu/' all_pic = os.listdir(path) return render_template('welcome.html',all_pic = all_pic)#具体展示图片@app.route('/<path>',methods=['GET','POST'])def list_pic(path): #错误链接无法找到图片目录就提示错误链接 if(path not in os.listdir('./static/mzitu/')): return render_template('error.html') pic_path = './static/mzitu/' + path all_pic = os.listdir(pic_path) return render_template('pic.html',title = path,all_pic = all_pic)if __name__ == '__main__': #port为端口,host值为0.0.0.0即不单单只能在127.0.0.1访问,外网也能访问 app.run(host='0.0.0.0',port='2333')
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>欢迎来到福利页面</title></head><body> {% for i in all_pic: %} <a href="/{{i}}">{{i}}</a> <br><br> {% endfor %}</body></html>
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>{{ title }}</title></head><body> {% for i in all_pic %} <img src="./static/mzitu/{{title}}/{{i}}" alt="{{i}}"> <br> {% endfor %}</body></html>
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>出错了</title></head><body> 你要访问的页面不存在... <br> <a href="/">点此返回首页</a></body></html>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!