ホームページ  >  記事  >  ウェブフロントエンド  >  シンプルな Web サイトを構築する方法を教えます: Python 開発 Web サーバー

シンプルな Web サイトを構築する方法を教えます: Python 開発 Web サーバー

坏嘻嘻
坏嘻嘻オリジナル
2018-09-13 17:35:314701ブラウズ

Python には、基本的な小さなアーキテクチャから完全なアーキテクチャに至るまで、無数の Web フレームワークがあり、それぞれに独自の利点があります。これで Web 開発を行う準備が整いましたが、詳細に入る前に、最初から始めましょう。

目標

既存のリッチ画像リソースを使用して画像閲覧Webサイトを構築

条件

開発言語:

python3

ライブラリ:

flask: オープンソースの Python Web サーバー フレームワーク
jinja2:flask のデフォルトのテンプレート エンジン

エディタ:

推奨の pycharm

最も単純な Web サーバー

Python は次のインターフェースを提供します: WSGI: Web サーバー ゲートウェイ インターフェース
Web 開発者が必要とするのは、HTTP 要求に応答する関数を実装することだけです。 TCP 接続、HTTP の生の要求および応答形式には影響しません。
次の例は最も単純な Web アプリケーションです:

# 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: すべての HTTP リクエスト情報を含む dict オブジェクト

  • start_response : HTTPレスポンスを送信する関数です。

2 つのスクリプトを同じディレクトリに配置し、server.py を実行し、http://127.0.0.1:8000 にアクセスして効果を確認します。

URL の処理

実際、Web アプリケーションはさまざまな URL を処理します。
hello.py

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)
...
を変更します

これは 2 つの URL、'/' と '/signin' を処理します
もちろん、このように書き続けることもできます...疲れていない場合。

テンプレートを使用する

上記の方法は面倒で時間がかかるため、高度なことを学びましょう:
flask

コードを見てください

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()

注意、これは単一のファイルです。
このスクリプトを分析してみましょう:
Flask は、Python のデコレータを通じて内部で URL を関数に自動的に関連付けます。
操作を開始した後、
'/' にアクセスすると、「HOME」という単語
'/signin' が表示されます。このとき、GET でアクセスすると、フォームに「admin」と「password」を入力し、「ログイン」をクリックします—>
「/signin」に POST 経由でアクセスしますが、表示されるのは「Hello, admin!」または「Bad username or password」です。

GET を知らない人へ POST フォームと HTML フォームを使用する学生には、HTML の基礎を学ぶことをお勧めします。

しかし、これはまだ少し柔軟性がありません。ユーザーがアクセスするときに表示されるコンテンツはすべて書き出す必要があり、再利用できません。

テンプレート エンジンを使用します。 #テンプレートは上記の問題を解決します。まずコードの一部を見てみましょう

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()

ここでは、ルート ディレクトリ内のすべてのファイルの名前を読み取り、それらを HTML テンプレート ページに渡します

次に、ディレクトリ テンプレートを.py と同じディレクトリにあります。保存されているのはテンプレートです。このテンプレートの特別な点は、Python の命令と変数を使用して

{{ を HTML

home.html# に記述できることです。 ##

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

{% %} }}内に書かれているのは変数

なので、最終的に複数のタグが生成され、そのタグの名前がディレクトリ名になります。


上記の基本的なチュートリアルでは、Liao Xuefeng について言及しています。

これで基礎が完成しました。次のステップは完成品です。

完成品

前回クロールした写真を使用して Web サイトを構築します。良いアイデアです!

ここで、.py スクリプトと同じディレクトリに静的ディレクトリを作成して、画像を保存します。 (.py が置かれているディレクトリの外に画像が配置されている場合、画像はリンクされません)

#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;)

次に、テンプレート ファイル

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>

関連する推奨事項:

Eclipse PyDev Django Mysql による Python Web 開発環境の構築_MySQL

##初めてWebに参入 開発するにはphp、python、rubyどれを学べばよいでしょうか?

以上がシンプルな Web サイトを構築する方法を教えます: Python 開発 Web サーバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。