Webフレームワークテンプレート、ブロッカー、JSON、梱包の高度な機能

フラスコフレームワークの実装クラス

テンプレート

<!DOCTYPE HTML > 
< HTML LANG = "EN" のxmlns = "http://www.w3.org/1999/html" > 
< > 
    < メタ文字コード= "UTF-8" > 
    < タイトル>タイトル</ タイトル> 
< / ヘッド> 
< ボディ> 
    < BR >显示数据< \ BR > 
    {{ID}}、{{名前}}、{{年齢}} 
</ ボディ> 
</ HTML >

インポートから IoがインポートたStringIO、BytesIOの

D = { ' ID ':5、' 名称'' トム'' 年齢':20 } 

クラステンプレート:
    _pattern = ' {{([-ZA-Z0-9 _] + )}} ' 
    正規表現 = re.compile(_pattern)

    @classmethod 
    DEF レンダリング(CLS、テンプレート、データ:辞書):
        HTML = たStringIO() 
オープンテンプレート、符号付き = 'UTF-8 ' )、F等の:
             のためのF:
                開始 = 0 
                改行 = '' 
                のための整合cls.regex.finditer(ライン):
                    改行 + = 行の[開始:matcher.start()]
                     プリント(整合、整合.group(1 ))
                    キー = matcher.group(1 
                    TMP = data.get(キー、'' 
                    改行 + = STR(TMP)
                    開始 =matcher.end()
                 
                    改行 + = 行[スタート:] 
                html.write(改行)
            プリント(html.getvalue())
        html.close()模板渲染 
ファイル名= ' index.htmlを' 
Template.render(ファイル名、 D)

Jinja2の

文書
の公式ウェブサイト:HTTPS //jinja.palletsprojects.com/en/2.10.x/ 
中国:HTTP //docs.jinkan.org/docs/jinja2/ 

インストール
Jinja2のインストールPIPを
PIPがmarkupsafeをインストール

テンプレートの構築

<!DOCTYPE HTML > 
< HTML のlang = "EN" > 
< ヘッド> 
    < メタのcharset = "UTF-8" > 
    < タイトル> Magedu </ タイトル> 
</ ヘッド> 
< ボディ> 
< UL > 
        显示数据
    IDの{%、名前、ユーザリストの%で年齢} 
    < リチウム> {{loop.index}}、{{ID}}、{{名前}}、{{年齢}} </ > 
    {%ENDFOR%} 
</ UL >
ボディ> 
</ HTML >
################# ###################以下ローディングテンプレートコード例
から Jinja2のインポート環境、PackageLoader、FileSystemLoaderの

ENV =環境(ローダー= PackageLoader( 'webarch'、 'テンプレート'))#のバッグローダー 
ENV =環境(= FileSystemLoaderローダー(' webarch /テンプレート' ))

テンプレート = env.get_template(' index.htmlを' 

のUserList = [  3、' TPM '、20である)、  4、' のHet '、23である)、  7、'ASDF '23 )、  1、' aasf '18 
] 
D = { ' ユーザーリスト':ユーザーリスト、' USERCOUNT ' :LEN(ユーザリスト)}
 プリント(template.render(** D))
############### テンプレートモジュールを提供################## template.py 
から Jinja2のインポート環境、PackageLoader、FileSystemLoader 

ENV =環境(ローダ= PackageLoader(' webarch '' テンプレート'))  バッグローダーENV =環境(ローダ= FileSystemLoader( 'webarch /テンプレート'))#ファイルシステムローダー

DEF レンダリング(名前、データ:辞書):
     " 「」
    テンプレートのレンダリング
    :PARAM名:このテンプレートのファイル名を検索するためのテンプレートディレクトリ
    のparamデータ:データディクショナリ
    :リターン:HTML文字列
    「」 " 
    テンプレート = env.get_template(名)#の検索モジュールインデックス。HTML
    リターン template.render(**データ)
############## コード増加################## 

#は、オブジェクトの作成ルータ 
IDX = ルーター()
のPy =ルータ(' / Pythonの' 
ユーザー =ルータ(' ユーザー/ ' 

#の登録
App.register(IDX、Pyを)
App.register(ユーザー)

py.register_preinterceptor(IP)

@ user.get(R ' ^ /?$ " DEFのuserhandler(リクエスト):
    のUserList = [  3、' TPM '、20である)、  4、' ヘット'23 )、  7 ' ASDF '23 )、  1、' aasf '18 
    ] 
    D = { ' ユーザーリスト':ユーザーリスト、' USERCOUNT ' :LEN(ユーザーリスト)が}
     を返す(レンダリング' index.htmlを"、D)

モジュラー

 

1 。パケットwebarch作成
 2 このパッケージモジュールに.template.pyを
 3 。のAppクラスにWeb.py新しいモジュール、AttrDict、ルータ、
 4ルート定義、登録コード、ハンドラの定義をwebarchへ/ __init__のの.pyを中
サーバコードの開始の内部に配置されapp.pyを構築するためのプロジェクトのルートディレクトリの下の5、。

拦截器interceptor

#加入拦截器功能的方式
1、App和Router类直接加入
把拦截器的相关方法、属性分别添加到相关类中
实现简单
2、Mixin
App和Router类都需要这个拦截器功能,可以使用Mixin方式、将属性、方法组合进来,但是,App类拦截器适合使用第二种,但是Router的拦截器是每个实例不一样的,所以使用第一种方式实现

 

def fn(request:Request) -> Request:
    pass

 

def fn(request:Request,response:Response) -> Response:
    pass

IP拦截

 

#创建Router对象
idx = Router()
py = Router('/python')
user = Router('/user')

#注册
App.register(idx,py)
App.register(user)

#ip拦截
def ip(request:Request):
    print(request.remote_addr,'~~~~~')
    print(type(request.remote_addr))
    if request.remote_addr.startswith('192.'):
        return request
    else:
        return None #返回None将截断请求

py.register_preinterceptor(ip)

Json支持

@py.get(r'^/{id}$')
def pythonhandler(request):
    userlist = [
        (3, 'tom', 20),
        (5, 'jerry', 16),
        (6, 'sam', 23),
        (8, 'kevin', 18)
    ]
    d = {'userlist':userlist,'usercount':len(userlist)}
    res = Response(json=d)
    return res

总结

 

完整代码

。。。

おすすめ

転載: www.cnblogs.com/xiaoshayu520ly/p/11324628.html