「Python の基本」Web アプリケーション プログラミング

  • CS、クライアント/サーバー クライアントのアップグレードは面倒です。
  • BS,ブラウザ/サーバー;

Officeなどの重いソフトウェアに加えてPS、ほとんどのソフトウェアはWeb新浪ニュース、ブログ、微博などの形で提供されています。

Web発達段階

  1. 静的な Web ページの場合、ページの各変更は HTML ソース ファイルを手動で変更することによって直接保存されますが、これでは対話を処理できません。
  2. ユーザーから送信された動的データを処理するために使用される CGI (Common Gateway Interface) (C/C++ で記述)。
  3. ASP/JSP/PHP スクリプト言語は、開発効率が高く、HTML と密接に統合されており、低レベル言語 CGI をすぐに置き換えます。
  4. MVC では、スクリプト言語を直接使用して HTML をチェックすることによって生じる保守性の問題を解決するために、Web アプリケーションは Web 開発を簡素化するモードModel-View-Controllerを導入しています。
  5. 現在、非同期開発、MVVM フロントエンド テクノロジは無限の流れの中で出現しています。

1. HTTP プロトコルの紹介

HTTP/1.1 バージョンでは、複数の HTTP リクエストがTCP接続を多重化できます。

1. HTTP リクエスト

要求応答モード、1 つの要求は 1 つの応答のみを処理します。

  1. クライアントは最初にリクエストをサーバーに送信する必要があります。リクエストには次のものが含まれます。
  • タイプ: GET、POST、DELETE...
  • パス: /full/url/path
  • ドメイン名: www.sina.com.cn
  • その他のヘッダー
  • POST の場合、リクエストには Body も含まれます
  1. サーバーは、クライアントが HTTP 応答を返すことを望んでいます。応答には次のものが含まれます。
  • 応答コード: 200 成功、3XX リダイレクト、4XX 要求エラー、5XX サーバー処理要求エラー
  • 応答タイプ: Content-Type で指定
  • その他のヘッダー
  • 本文: 応答のコンテンツ、Web ページの HTML ソース コードなどが含まれます。
  1. 返されたコンテンツに他の HTTP 要求も含まれている場合は、1.2 を繰り返します。

2. HTTP フォーマット

  • 各行についてHeader、複数のHeader行は改行文字 '\r\n' で区切られます。
  • HeaderBody2 つの '\r\n'で分割します。
  • Bodyデータ型はContent-Typeヘッダによって。
  • Content-Encoding圧縮方法を指定します。

2. HTML の紹介

HTML は、ブラウザに Web ページの表示方法を伝える一連の文法規則を定義します。

HTML ドキュメントは一連のタグで構成され、最も外側のタグは であり<html>、仕様に<head>...</head>は と を含める必要があります<body>...</body>

HTML はリッチ ドキュメント モデルであるため、リンク、画像、表、フォームなどを表すために使用される一連のタグがあります。

1.CSS

Cascading Style SheetsHTML のすべての要素の表示を制御するために使用されるカスケード スタイル シート。

2.JavaScript

HTML をインタラクティブにするために追加され、HTML に埋め込んだり、HTML に外部リンクしたりできます。

HTML、CSS、JavaScript の習熟度は、優れた Web 開発者にとって必須です

3. WSGI インターフェース

Web Server Gateway Interface

HTTP 要求の受信、HTTP 要求の解析、および HTTP 応答の送信のための Python 標準インターフェースであり、Web サーバーまたはゲートウェイと Web ビジネスまたはフレームワークの間のブリッジです。

どんなに複雑なWebアプリケーションでも、エントリポイントはWSGI処理関数で、HTTPリクエストの入力情報をすべて取得し、environHTTPレスポンスをstart_response()出力しHeader、関数の戻り値を出力しますBody

1. WSGI インターフェイスを実装する

def application(environ, start_response):
    start_response('200 oK', [('Content-Type', 'text/html')])
    body = f"<h1>Hello, {
      
      environ['PATH_INFO'][1:] or 'web'}!</h1>"
    return [body.encode('utf-8')]
  • environすべての HTTP 要求情報を含む dict オブジェクト。
  • start_response一度だけ送信できる HTTP 応答を送信する関数。形式については上記の例を参照してください。
  • returnHTTP 応答の本文、バイト。

2. WSGI を実行する

Python には WSGI サーバー モジュールが組み込まれていますwsgiref。これは純粋な Python で記述された参照例であり、実行効果に関係なく WSGI 標準に完全に準拠しており、開発とテストにのみ使用されます。

from wsgiref.simple_server import make_server

# 创建一个服务器,IP地址为空,端口是 8000,处理函数是 application
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP 请求
httpd.serve_forever()

4. Web フレームワークの使用

顧客サービス側からのさまざまな要求に直面して、WSGI を使用する場合、さまざまな情報に対してさまざまな処理ロジックを作成する必要がありenviron、そのようなコードは保守が困難です。

Web フレームワークは、URL関数へのマッピングと HTTP リクエストのパラメーターの解析を担当するため、1 つの関数を処理するために 1 つの関数に集中できますURL

1.フラスコ

Python で最も人気のある Web フレームワーク。

インストール

pip install flask

from flask import Flask
from 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()

Flask はデコレータを介してURL関連付けて機能し、request.form['name']フォームのコンテンツを取得します。

Flask 自身のサーバー (デバッグ用) のポートは 5000 です。

2. その他の Web フレームワーク

  • DjangoJ
  • web.py小さい
  • Bottleフラスコに似ている
  • Tornado非同期

5. テンプレートの使用

Python コードと HTML コードを分離し、すべての HTML コードをテンプレートに入れます。

1.MVC

モデル ビュー コントローラー

Controllerビジネス ロジックを担当する URL を処理する関数。

View.html テンプレート ページは表示ロジックを担当し、最終的に単純な変数置換によってユーザーに表示される HTML を出力します。

Model置換のためにビューに渡すために使用される変数。

2.ジンジャ2

インストール

$ pip install janja2

from flask import Flask, request, render_template

app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def home():
    # 使用模板: ./templates/home.html
    return render_template('home.html')


@app.route('/signin', methods=['GET'])
def signin_form():
    return render_template('form.html')


@app.route('/signin', methods=['POST'])
def signin():
    # 需要从request对象读取表单内容:
    username = request.form['username']
    password = request.form['password']
    if username == 'admin' and password == 'password':
        return render_template('signin-ok.html', username=username)
    return render_template('form.html',
                           message='Bad username or password',
                           username=username)

Flask関数を介してrender_templates()テンプレートのレンダリングを実現します。

{ { name }}置き換える必要のある変数を示します。

{% ... %}ループや条件判定などの指示を示します。

3. その他のテンプレート

  • Mako、<% ... %> および ${xxx}
  • Cheetah、<% ... %> および ${xxx}
  • Django、{% ... %} および { { xxx }}

PS: あらゆる分野の友人を歓迎します阅读评论友人に感謝します点赞, 关注, 收藏!

おすすめ

転載: blog.csdn.net/ChaoMing_H/article/details/129578284