#以下は、独自のWebフレームワークの開発である: #1 # HTTP、ステートレス、短い接続 #2 # ブラウザ(ソケットクライアント) #の ウェブサイト(ソケットサーバ) #3 # 自分のウェブサイト書くために #の a.socketサービスエンド # Bのルーティングシステム: # さまざまなコンテンツを返すために、異なるURLに応じて #の URLを- >関数 #の C文字列は、ユーザーに返されます。 # テンプレートのレンダリングエンジン(置き換え): # HTMLテンプレート(特殊文字)として機能します 。# 自分の任意のデータ作成 #を4. #ウェブフレームタイプ: # - A、B、C - >トルネード # - [サードパーティA - > wsgiref]、B、C - >ジャンゴ # - [サードパーティ- > wsgiref]、B [ 第三者C - > Jinja2の] - >フラスコに、 インポートソケット インポートpymysql DEF F1(要求) を開くと(' form.html '、' R&LT '、=コード'UTF-8 ')AS F: #のRBは、操作は、符号化パラメータ指定サポートされていない コンテンツ= )(達し、f.readを 返すコンテンツDEF F2を(要求): オープン(と' table.html '、' R&LT '、コード= ' 8-UTF ' )AS F: コンテンツ =は、f.read()に達した 輸入ランダム 年齢 = random.randint(1100 ) 内容 = content.replace(' @@ @@年齢" 、STR(年齢)) を返すコンテンツ DEF F3を(要求を): #1。取得したデータをデータベース コネティカット= pymysql.connect(ホスト= ' localhostの'、ポート= 3306、=ユーザー' ルート'、パスワード= ' 123 '、データベース= ' DB1 '、文字セット= " UTF8' ) カーソル = conn.cursor(カーソル= pymysql.cursors.DictCursor) #の結果取得辞書がある cursor.execute(' SELECT ID、のUserInfoからユーザー名、パスワード" ) user_list = cursor.fetchall() #すべてのデータを取得し、リスト辞書内の要素 プリント(user_list) #[{ 'ID' :. 1、 'ユーザ名': 'トム'、 'パスワード': '111'}、{ 'ID':2、 'ユーザ名': '結婚'、 'パスワード': '222'} 、{ 'ID':3、 'ユーザ名': 'ジャック'、 'パスワード': '333'}、{ 'ID':10、 'ユーザ名': 'アレックス'、「パスワード':' 555 '}、{ ' ID '11、'ユーザ名':'トミー''パスワード「:」777「}] cursor.close() はconn.close() #2のデータ列の内部にはROW_LISTを与えるために、それは要素が文字列であるリストは、ありますHTML、最終的にはブラウザに返さrow_strに@@行@@ TBODYを、置き換え、内容を読み取ります。 (で開きます" table1.html ' ' R '=コード' UTF-8 ' Fとして) 含有量 = f.read() 含有量 = content.replace(' @@行@@ ' 、row_str) プリント(コンテンツ) 戻りコンテンツ DEF F4(リクエスト): CONN = pymysql.connect(ホスト= ' はlocalhost '、ポート= 3306、ユーザ= ' ルート'、パスワード= ' 123 '、データベース= ' DB1 '、文字セット=' UTF8 ' ) カーソル = conn.cursor(カーソル= pymysql.cursors.DictCursor) #の結果取得辞書がある cursor.execute(' SELECT ID、ユーザ名、パスワードのUserInfoから' ) user_list = cursor.fetchall() cursor.close( ) はconn.close() オープン(と' table2.html '、' R&LT '、コード= 'UTF-8 ' :)AS F コンテンツ =に達し、f.read() #実装サードパーティツールのテンプレートベースのレンダリング(置換)から Jinja2のインポートテンプレート テンプレート =テンプレート(コンテンツ)#オブジェクトを与えるために、通過するパラメータリードのHTMLコンテンツがインスタンス化 コンテンツ= template.render(user_list = user_list) を返すコンテンツ URL_LIST = [(' /form.html '、F1)、(' /表.html 'F2)、( ' /table1.html 'F3)、( ' /table2.html '、F4)] #URLが要求されてもよい DEF RUN(): SK = socket.socket() sk.bind( (' 127.0.0.1 '、8999 )) sk.listen( 10 ) 一方TRUE: コネティカット、ADDR = sk.accept() データ = conn.recv(1024).decode(' UTF-8 ')#の受信要求。復号されない場合、得られた多くのデータが存在する改行\ R \ nは、明確に構造見ることができる #の印刷(データ) ヘッダ、ボディdata.split =(' \ R&LT \ N- \ R&LT \ N- ')#のリクエストヘッダを、及び応答部材は、二つの改行で区切られ header_item = header.split(「\ R&LT \ N- 」)#改行がリスト取得するために、分離されているヘッダと要求されたコンテンツ #1 印刷(header_item) 取得し、URL、HTTP header_item = [0] .split(「 」)#最初のリクエストヘッダ要素がスペースで区切られ conn.send(B ' 200 \ R&LT \ N- \ R&LT \ N-であるHTTP / 1.1 OK ')#HTTPプロトコル #ルーティングシステムの機能を持つURLの関係によっては、URLは、異なるコンテンツを返す ためのアイテムでURL_LIST: IF項目[ 0] == URL: #URLがある場合 。RET =項目[1](データ)#1 プット要求パラメータを取得するために、関数に戻り値を渡さ conn.send(ret.encode(' UTF-8 ' )) BREAKを 他: conn.send(B ' 404見つかりません' ) はconn.close() IF __name__ == "__main__ " : 実行()