day93-1ミドルウェア、テンプレートエンジン、インポートモジュール

テンプレートエンジン

  1. レンダリングの基本データ型(重要)

    • 文字列、整数、小数、
    • リスト、辞書
    • フィールドのリスト・セット(pymysql)
    • 私は戻り値の種類を知っていない、より多くの印刷外観
  2. マスター(重要)

    • 背景レイアウトマネージャのページ(layout.html)
    • サブページ版の始まりとなりました{% extends 'layout.html' %}
    • マスターと、対応するバージョンを使用してサブページ{% block mycontent/mycss/myjs %}
  3. インポートモジュールは、(重要)

    python:
     导入模块
         import mycustom
    django:
     导入模块
         {% include "niubi的页面" %}    # 模块页面可以不需要html,head那些,只有你需要的内容就可以,因为他本身不需要被渲染,比如一个form表单
    
    # 可以重复导入,会重复展示效果

    マスターモジュールとの間の差を導入

    • テンプレートの継承は、ページ全体、より多くの再利用可能なウィジェットのいくつかのためのインポートモジュールであります
  4. 組み込み関数

    • 推奨しない、その上に、パスを、テンプレートをレンダリングビューで直接ハンドリングの効率が低下します

    例:送信されたパラメータの名前の名前を仮定

    関数の使用 効果 結果の表示
    {{名前| 上部}} 大文字(のpython実際に呼び出さ) 六月
    {{名前| }}下部 下ケース 六月
    {{名前| 最初| 上部}} 最初の文字を取得するには、その後、首都、それを聞かせて J
    {{名前| truncatewords: "3"}} 最初の三つの言葉を取り、残りは... 脳のサプリメント
  5. カスタム機能

    1. アプリでtemplatetagsモジュールを作成します
    2. xxx.py:ような任意の.pyファイルを作成します
    3. 他の人の規則に従って、名前を変更することはありませんか、間違いを犯すのは簡単です
    4. 二つの方法で:
      • simple_tag:あなたは複数のパラメータを渡すことができます
      • simple_filter:2つのだけの引数
# xxx.py
from django import template

register = template.Library()

@register.filter
def my_filter(val, args):
    return val + args

@register.simple_tag
def my_upper(val, args, args1):
    return val + args + args1
<!--test.html-->  
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
 {% load xxx %}
 {{ name | my_filter:'haha'}}  <!--注意:后面的my_filter:'haha'中间不能有一个空格-->
 {% my_upper 'haha' 'lala' 'hehe' %}  <!--参数间空格隔开-->
</body>
</html>

ミドルウェア(フォーカス)

入るとミドルウェアを通過する必要性を出るときDjangoはガードDjangoのミドルウェアに類似のライフサイクルのフルバージョン、データを要求します

  • フロントとバックと呼ばれるミドルウェア間
  • 原則:データが提出する前に、そのようなクライアントIPの正当性をチェックするなど、いくつかのテストは、あなたがミドルウェアを置くことができます。
  • エッセンス:クラス
# Django的settings
# 可以通过from...import的方式查看一下
from django.middleware.security import SecurityMiddleware
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

共通ミドルウェア:

  • どちらも、継承する必要があるMiddlewareMixinクラスを
  • あなたは、少なくとも達成するために必要となるprocess_request process_response2つのメソッドを

カスタムミドルウェア

# 直接在django文件夹下,新建一个py文件
# m1.py
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse

class M1(MiddlewareMixin):

    def process_request(self, request):
        # 可以在这里做一些IP的验证之类的
        print('m1.process_request')
        # return HttpResponse('回去吧!')

    def process_response(self, request, response):
        print('m1.process_response')
        return response

    def process_view(self, request, view_func, args, kwargs):

        print('m1.process_view')
        # return HttpResponse('回去吧!')
# m2.py
from django.utils.deprecation import MiddlewareMixin

class M2(MiddlewareMixin):

    def process_request(self, request):
        print('m2.process_request')

    def process_response(self, request, response):
        print('m2.process_response')
        return response

    def process_view(self, request, view_func, args, kwargs):
        print('m2.process_view')
# 在settings的MIDDLEWARE中添加自定义的中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'm1.M1',
    'm2.M2',
]

この時点で、これらの配列は、前端と後端で印刷表示するために相互作用することができる、ミドルウェアの実行順序を決定します

ZOZRu4.png

# 总结
'''
   请求到达中间件之后,先按照正序执行每个注册中间件的process_request方法,process_request方法返回的值是None,就依次执行,如果返回的值是HttpResponse对象,不再执行后面的process_request方法,而是执行当前对应中间件的process_response方法(注意不是掉头执行所有的process_response方法),将HttpResponse对象返回给浏览器。也就是说:如果MIDDLEWARE中注册了6个中间件,执行过程中,第3个中间件返回了一个HttpResponse对象,那么第4,5,6中间件的process_request和process_response方法都不执行,顺序执行3,2,1中间件的process_response方法。
'''

process_viewがある場合は()

ZOZWDJ.png

# 总结
'''
process_request方法都执行完后,匹配路由,找到要执行的视图函数,先不执行视图函数,先执行中间件中的process_view方法,process_view方法返回None,继续按顺序执行,所有process_view方法执行完后执行视图函数。假如中间件3 的process_view方法返回了HttpResponse对象,则4,5,6的process_view以及视图函数都不执行,直接从最后一个中间件,也就是中间件6的process_response方法开始倒序执行。
'''

MVCとMTV

でのpythonジャンゴで唯一のユニークなMTC

プロセス:

V(T) 履歴書) M(M)
例えば クライアント 給仕 クック(調理用原料の使用)
ロジックプロセス テンプレートページ(HTMLページ) サービス要求機能の処理 データベースの操作に関連します
MVC ビュー(モデル) C:コントローラ(制御装置) モデル(テンプレートページ)
MTV テンプレート 景色 モデル

おすすめ

転載: www.cnblogs.com/lucky75/p/11373266.html