Heim  >  Artikel  >  Web-Frontend  >  Bringen Sie Ihnen bei, wie Sie eine einfache Website erstellen: Python-Entwicklungs-Webserver

Bringen Sie Ihnen bei, wie Sie eine einfache Website erstellen: Python-Entwicklungs-Webserver

坏嘻嘻
坏嘻嘻Original
2018-09-13 17:35:314762Durchsuche

Es gibt unzählige Web-Frameworks in Python, von einfachen kleinen Architekturen bis hin zu vollständigen Architekturen, und sie haben ihre eigenen Vorteile. Sie sind also bereit, es für die Webentwicklung zu verwenden, aber bevor wir uns mit den Details befassen, fangen wir von vorne an.

Ziel

Erstellen Sie eine Bildanzeige-Website unter Verwendung vorhandener umfangreicher Bildressourcen

Bedingungen

Entwicklungssprache:

python3

Bibliothek:

flask: ein Open-Source-Python-Webserver-Framework
jinja2:flasks Standard-Template-Engine

Editor:

empfohlenes Pycharm

Der einfachste Webserver

Python stellt uns eine Schnittstelle zur Verfügung: WSGI: Web Server Gateway Interface
Webentwickler müssen lediglich eine Funktion implementieren, um auf HTTP-Anfragen zu antworten. Ohne TCP-Verbindungen, HTTP-Rohanfrage- und Antwortformate zu berühren.
Das Folgende ist ein Beispiel für die einfachste Webanwendung:

# hello.pydef application(environ, start_response):
    start_response(&#39;200 OK&#39;, [(&#39;Content-Type&#39;, &#39;text/html&#39;)])    return [b&#39;<h1>Hello, Python web!</h1>&#39;]# server.py# 从wsgiref模块导入:from wsgiref.simple_server import make_server# 导入我们自己编写的application函数:from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:httpd = make_server(&#39;&#39;, 8000, application)
print(&#39;Serving HTTP on port 8000...&#39;)# 开始监听HTTP请求:httpd.serve_forever()
  • environ: ein dict-Objekt, das alle HTTP-Anfrageinformationen enthält;

  • start_response: Eine Funktion, die eine HTTP-Antwort sendet.

Legen Sie die beiden Skripte in dasselbe Verzeichnis, führen Sie server.py aus und besuchen Sie http://127.0.0.1:8000, um den Effekt zu sehen.

URLs verarbeiten

Tatsächlich handelt es sich bei Webanwendungen um die Verarbeitung verschiedener URLs.
Wir werden hello.py ändern

def application(environ, start_response):
    method = environ[&#39;REQUEST_METHOD&#39;]
    path = environ[&#39;PATH_INFO&#39;]    if method==&#39;GET&#39; and path==&#39;/&#39;:        return handle_home(environ, start_response)    if method==&#39;POST&#39; and path=&#39;/signin&#39;:        return handle_signin(environ, start_response)
...

Dadurch werden zwei URLs verarbeitet, „/“ und „/signin“
Natürlich können Sie so weiter schreiben ... wenn Sie nicht müde sind.

Vorlagen verwenden

Da die obige Methode zu ermüdend und langsam ist, lernen wir etwas Fortgeschrittenes:
Flasche

Sehen Sie sich den Code an

from flask import Flaskfrom flask import request

app = Flask(__name__)@app.route(&#39;/&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])def home():
    return &#39;<h1>Home</h1>&#39;@app.route(&#39;/signin&#39;, methods=[&#39;GET&#39;])def signin_form():
    return &#39;&#39;&#39;<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>&#39;&#39;&#39;@app.route(&#39;/signin&#39;, methods=[&#39;POST&#39;])def signin():
    # 需要从request对象读取表单内容:
    if request.form[&#39;username&#39;]==&#39;admin&#39; and request.form[&#39;password&#39;]==&#39;password&#39;:        return &#39;<h3>Hello, admin!</h3>&#39;
    return &#39;<h3>Bad username or password.</h3>&#39;if __name__ == &#39;__main__&#39;:
    app.run()

Beachten Sie, dass es sich hierbei um eine einzelne Datei handelt.
Lassen Sie uns dieses Skript analysieren:
Flask verknüpft automatisch URLs mit Funktionen intern über Python-Dekoratoren. Nachdem
gestartet wurde, besuchen wir
'/' und die Seite, die wir sehen, ist ein "HOME"-Wort
'/signin'. Zu diesem Zeitpunkt greifen wir über GET darauf zu und sehen ein Formular , geben Sie „admin“ und „password“ ein, klicken Sie zum Anmelden auf „
“/signin“, jetzt wird „Hallo, Admin“ oder „Ungültiger Benutzername oder Passwort“ angezeigt

Für diejenigen, die GET nicht kennen. Für Studenten mit POST- und HTML-Formularen wird empfohlen, die Grundlagen von HTML zu erlernen.

Aber das ist immer noch etwas unflexibel. Der gesamte Inhalt, den Benutzer beim Zugriff sehen, muss ausgeschrieben werden und kann nicht wiederverwendet werden, was zu mühsam ist

Verwenden Sie eine Template-Engine

Vorlage löst unser obiges Problem. Schauen Sie sich zunächst einen Code an

from flask import Flask, request, render_templateimport os

app = Flask(__name__)@app.route(&#39;/&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])def home():
    path = &#39;/&#39;
    all_file = os.listdir(path)    return render_template(&#39;home.html&#39;,all_file = all_file)if __name__ == &#39;__main__&#39;:
    app.run()

Hier werden die Namen aller Dateien im Stammverzeichnis gelesen und an die HTML-Vorlagenseite übergeben

Dann werden die Verzeichnisvorlagen im erstellt Gleiches Verzeichnis von .py, hier wird unsere Vorlage gespeichert. Das Besondere an der Vorlage ist, dass Sie Python-Anweisungen und -Variablen verwenden können, um die Anweisung

{{ in HTML

home.html

{% for i in all_file %}    <a href="/page/{{ i }}">{{ i }}</a>{% endfor %}

{% %} Was in }} geschrieben ist, ist die Variable


. Das Endergebnis ist also, dass mehrere Tags generiert werden und der Name des Tags der Verzeichnisname ist.

Das obige grundlegende Tutorial bezieht sich auf Liao Xuefeng.

Die Grundlagen sind also abgeschlossen und der nächste Schritt wird das fertige Produkt sein:

Fertiges Produkt

Verwenden Sie die Bilder, die wir das letzte Mal gecrawlt haben, um die Website zu erstellen. Gute Idee!

Erstellen Sie hier ein statisches Verzeichnis im selben Verzeichnis wie das .py-Skript, um Bilder zu speichern. (Das Bild wird nicht verlinkt, wenn es außerhalb des Verzeichnisses platziert wird, in dem sich .py befindet)

#beautiful_pic.pyfrom flask import Flaskfrom flask import requestfrom flask import render_templateimport os

app = Flask(__name__)#显示所有文件夹@app.route(&#39;/&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])def list_all():
    path = &#39;./static/mzitu/&#39;
    all_pic = os.listdir(path)    return render_template(&#39;welcome.html&#39;,all_pic = all_pic)#具体展示图片@app.route(&#39;/<path>&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])def list_pic(path):
    #错误链接无法找到图片目录就提示错误链接
    if(path not in os.listdir(&#39;./static/mzitu/&#39;)):        return render_template(&#39;error.html&#39;)
    pic_path = &#39;./static/mzitu/&#39; + path
    all_pic = os.listdir(pic_path)    return render_template(&#39;pic.html&#39;,title = path,all_pic = all_pic)if __name__ == &#39;__main__&#39;:    #port为端口,host值为0.0.0.0即不单单只能在127.0.0.1访问,外网也能访问
    app.run(host=&#39;0.0.0.0&#39;,port=&#39;2333&#39;)

Dann die Vorlagendatei

welcome.html

<!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>

pic.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>

error .html

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>出错了</title></head><body>
    你要访问的页面不存在...    <br>
    <a href="/">点此返回首页</a></body></html>

Verwandte Empfehlungen:


Eclipse+PyDev+Django+Mysql zum Erstellen einer Python-Webentwicklungsumgebung_MySQL

Wenn Sie neu in der Webentwicklung sind, welches sollten Sie lernen: PHP, Python oder Ruby?

Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen bei, wie Sie eine einfache Website erstellen: Python-Entwicklungs-Webserver. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn