CS
、クライアント/サーバー クライアントのアップグレードは面倒です。BS
,ブラウザ/サーバー;
Office
などの重いソフトウェアに加えてPS
、ほとんどのソフトウェアはWeb
新浪ニュース、ブログ、微博などの形で提供されています。
Web
発達段階
- 静的な Web ページの場合、ページの各変更は HTML ソース ファイルを手動で変更することによって直接保存されますが、これでは対話を処理できません。
- ユーザーから送信された動的データを処理するために使用される CGI (Common Gateway Interface) (C/C++ で記述)。
- ASP/JSP/PHP スクリプト言語は、開発効率が高く、HTML と密接に統合されており、低レベル言語 CGI をすぐに置き換えます。
- MVC では、スクリプト言語を直接使用して HTML をチェックすることによって生じる保守性の問題を解決するために、Web アプリケーションは Web 開発を簡素化するモード
Model-View-Controller
を導入しています。 - 現在、非同期開発、MVVM フロントエンド テクノロジは無限の流れの中で出現しています。
記事ディレクトリ
1. HTTP プロトコルの紹介
HTTP/1.1 バージョンでは、複数の HTTP リクエストがTCP
接続を多重化できます。
1. HTTP リクエスト
要求応答モード、1 つの要求は 1 つの応答のみを処理します。
- クライアントは最初にリクエストをサーバーに送信する必要があります。リクエストには次のものが含まれます。
- タイプ: GET、POST、DELETE...
- パス: /full/url/path
- ドメイン名: www.sina.com.cn
- その他のヘッダー
- POST の場合、リクエストには Body も含まれます
- サーバーは、クライアントが HTTP 応答を返すことを望んでいます。応答には次のものが含まれます。
- 応答コード: 200 成功、3XX リダイレクト、4XX 要求エラー、5XX サーバー処理要求エラー
- 応答タイプ: Content-Type で指定
- その他のヘッダー
- 本文: 応答のコンテンツ、Web ページの HTML ソース コードなどが含まれます。
- 返されたコンテンツに他の HTTP 要求も含まれている場合は、1.2 を繰り返します。
2. HTTP フォーマット
- 各行について
Header
、複数のHeader
行は改行文字 '\r\n' で区切られます。 Header
Body
2 つの '\r\n'で分割します。Body
データ型はContent-Type
ヘッダによって。Content-Encoding
圧縮方法を指定します。
2. HTML の紹介
HTML は、ブラウザに Web ページの表示方法を伝える一連の文法規則を定義します。
HTML ドキュメントは一連のタグで構成され、最も外側のタグは であり<html>
、仕様に<head>...</head>
は と を含める必要があります<body>...</body>
。
HTML はリッチ ドキュメント モデルであるため、リンク、画像、表、フォームなどを表すために使用される一連のタグがあります。
1.CSS
Cascading Style Sheets
HTML のすべての要素の表示を制御するために使用されるカスケード スタイル シート。
2.JavaScript
HTML をインタラクティブにするために追加され、HTML に埋め込んだり、HTML に外部リンクしたりできます。
HTML、CSS、JavaScript の習熟度は、優れた Web 開発者にとって必須です
3. WSGI インターフェース
Web Server Gateway Interface
HTTP 要求の受信、HTTP 要求の解析、および HTTP 応答の送信のための Python 標準インターフェースであり、Web サーバーまたはゲートウェイと Web ビジネスまたはフレームワークの間のブリッジです。
どんなに複雑なWebアプリケーションでも、エントリポイントはWSGI処理関数で、HTTPリクエストの入力情報をすべて取得し、environ
HTTPレスポンスを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 応答を送信する関数。形式については上記の例を参照してください。return
HTTP 応答の本文、バイト。
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 フレームワーク
Django
Jweb.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 }}
- Previous: 「Python の基本」データベース アプリケーション プログラミング
- コラム:「Pythonの基礎」
PS: あらゆる分野の友人を歓迎します阅读
。评论
友人に感謝します点赞
, 关注
, 收藏
!