自分自身を開発するためのWebフレームワーク - day85 - Djangoの知人

以下は、独自の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__ " 
    実行()

 

おすすめ

転載: www.cnblogs.com/python-daxiong/p/12597540.html