フロントおよびリア側の相互作用の知人

ソフトウェア開発フレームワーク

  • C / Sアーキテクチャ
  • B / Sのアーキテクチャ
  • 注:B /秒基本的にC / S

HTTPプロトコル

  1. 4つの特性
    • TCP / IPベースのアプリケーション層の演技オーバー
    • 要求応答に基づいて、
    • ステートレス注:その[クッキーセッショントークン]
    • 接続なし注:長い接続用WebSocket(大型パッチのHTTPプロトコル)
  2. データフォーマット
    形式リクエスト
    要求最初の行(要求方法、プロトコルバージョン)
    :リクエストヘッダ(Vキーと値のペアバンチK)
    \ R \ N-
    リクエストがGETである場合に終了要求フォーム(実際のデータは、POST要求を有することになりますNO)、
    応答形式
    の最初の行に応答して
    最初に応答して
    、\ rを\ n個の
    レスポンスボディ
  3. ステータス応答コード
    、特にデジタルでいくつかの意味を表す
    1XX:サーバーはデータの提出を続けることができて、あなたが扱っているデータ受信に成功した
    2XXを:サーバーの成功応答(200のリクエスト)
    3XX:リダイレクション
    4XX:エラー要求(リソース要求404何の403回のアクセスが拒否されました)が存在しない
    内部サーバーエラー(500):5XXは、

リクエストメソッド

要求取得
データに他の人への
POSTリクエストを
(例えば:ユーザーがログインしたものを)他人にデータを送信するために
、URL:ユニフォームリソースロケータ

ハンドラインとLiteのWebフレームワーク

主にソケットプログラミングを使用して、開始がデータヘッダを介して送信され、ブラウザの要求となり、データ(送信時に一定の伝送フォーマットconn.sendによれば、内側から慣れるb'HTTPを必要とするかもしれません/ 1.1 200 OKの\ r \ nの\ r \ nのメッセージ「)

import socket

server = socket.socket()
server.bind(('127.0.0.1', 8081))
server.listen(5)  # 半连接池
# 接收浏览器数据
while 1:
    conn, addr = server.accept()
    data = conn.recv(1024)
    headers = data.decode('utf8').split(" ")[1]
    print(headers)
    conn.send(b'HTTP/1.1 200 OK\r\n\r\nhello') # 发送格式
""" # 浏览器发送过来的数据 - headers
b'GET / HTTP/1.1\r\n - 请求首行

Host: 127.0.0.1:8081\r\n - 请求头
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
Sec-Fetch-Site: none\r\nAccept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
\r\n'
"""

ベースのwsgirefモジュール

  1. ルーティングとオブジェクト・リレーショナル・ビューurls.py
  2. views.pyビュー機能が置かれている(処理ビジネス・ロジック)
  3. テンプレートテンプレートフォルダ(htmlファイルの束)

下記のファイルは、Webベースのモジュールwsgirefの簡易版であります

実際には、これはちょうどその上に2ヶ所のURLやビューにデータを追加し、機能を追加するためには、分割が完了した後、別のPYファイルに異なるモジュールに応じて分割され、

urls.py

import views
func = {
    '/index': views.index,
    '/login': views.login,
    '/register': views.register
}

views.py

def index():
    return b'index'


def login():
    return b'login'


def register():
    return b'register'

受付場所の.py

from wsgiref.simple_server import make_server
import urls


def run(env, response):
    """
    :param env: 请求相关的所有数据
    :param response: 响应相关的所有数据
    :return:
    """
    response('200 OK', [])
    choice = env.get('PATH_INFO')
    print(choice)
    if choice in urls.func:
        res = urls.func.get(choice)()
        return [res]
    else:
        return [bytes(404)]


if __name__ == '__main__':
    server = make_server('127.0.0.1', 8081, run)
    server.serve_forever()

静的および動的なページ

静的なページ

データは、同じ年に死ぬために書かれています

動的なページ

データはリアルタイムで取得され

EG:
フロントエンドへの後端部を示し、現在の時刻を取得1
に、データベース内の表示データを取得し、フロントエンドリア2.

質問:

htmlページにバックエンドのデータ転送を取得する方法

テンプレートのレンダリング:==>バックエンドは、HTMLページ>>>にデータを取得し

Jinja2のモジュール -前面表示の質問のバックエンドにデータを渡す方法を対処します

テンプレートの構文(Pythonのバックエンドに極めて近い文法)

<p>{{ user }}</p>
<p>{{ user.name }}</p>
<p>{{ user['pwd'] }}</p>
<p>{{ user.get('hobby') }}</p>

# 以上三种方式都是和python的取值方式一致

おすすめ

転載: www.cnblogs.com/xiongchao0823/p/11710816.html