(シンプルステーションメッセージを達成するために)ノートのカスタムDjangoのミドルウェアを使用することを学びます

1、Djangoのプロセスフローチャートミドルウェア

 

2、ミドルウェアの役割

公式ドキュメントは言った:..ミドルウェアは、それがグローバル(ミドルウェアはDjangoのリクエスト/レスポンスの処理フレームワークに接続されているDjangoの入力または出力を変更するためのシステムを「プラグイン」光、低レベルだ処理Djangoのリクエスト/レスポンスにフックのフレームワークでありますそれは軽量、低レベルである「プラグイン」グローバル変更入力または出力のDjangoのためのシステム)。

入力と出力の追加または削除、特定の値を実行した後、あなたがミドルウェアを使用する前に、表示したい場合には、あります。

一般的なシナリオは、要求ごとに要求されたすべてのユーザー名を取得、または送信メッセージ、次のような効果に達成したいことです。

まず、デザイン:デフォルトで通知レコードの新しい内容のためのデータベース内のテーブル、受信者(ユーザに関連付けられた外部キーテーブル)の時、予告の通知、状態を知らせる(状態0、未読。ユーザは、読み取り状態が1である変更、読み出しを指示するためにクリックしたとき)

読まれるようになるバーを持つことになり、各ページに通知するので、しかし、通知の状態を読んだ後、ディスプレイの数が0になった通知は、我々は未読通知の数はすべてのためにそう、いつでも変数で見ることができます倍の要求がデータベースを照会するために必要とされ、このユーザーの未読の通知の数が表示されるテンプレートに渡される前に、どのくらいです。

各要求は、ビューに渡される前に未読通知の名前と電話番号を入力するようにユーザを追加する必要があるため、これは非常に単純なミドルウェアです。

 

3、ミドルウェアの使用

  • middleware.py次のようにPyが、APPの新しいファイルを作成します。

  • 書き込み所望の論理機能(middleware.pyミドルウェアは、ユーザセッションからファイル名を取得し、このユーザのユーザIDテーブルを照会し、ユーザ通知ステータスクエリ通知テーブルのユーザIDは、未読のオブジェクトの数であり、そして書面による要求へのクエリの数):
from django.utils.deprecation import MiddlewareMixin
from web import models
from rbvc.models import UserInfo


class count_notice_num(MiddlewareMixin):
            def process_request(self,request):
                try:
                    self.username = request.session['username']
                except:
                    return None

                self.user_id = UserInfo.objects.get(username=self.username).id

                self.notice_num = models.Notice.objects.filter(userinfo_id=self.user_id).filter(has_read= 0).count()

                if self.notice_num == 0:
                    self.notice_num = ''

                request.notice_num = self.notice_num
                return None

    我々は、関数process一を書き換える必要があるので、ビューを実行する前にデータを追加しているので、

  • そして、settings.pyファイルパスにミドルウェアを宣言:rbvc.middleware.count_notice_numを(..クラスまたは関数名のファイル名のアプリケーション名)
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',
    'rbvc.middleware.RBACMiddleware',
    'rbvc.middleware.count_notice_num',
]
  • 次に、テンプレートのレンダリング(新PYファイル名パス無料、簡単に多重化)ビュー機能リターンを書き換えます
from django.shortcuts import render

def mp_render(request, template, context={}):
    try:
        context['username'] =request.session['username']
        context['notice_num']=request.notice_num
    except:
        pass
    return render(request,template, context)
  • 最後に、使用して、元の場所には、すべてのカスタム書き換えmp_render(ファイルPYの新しいパス名を導入する。なお、使用する前に、前述した機能のmp_render)のビューをレンダリング

   すべては( '***。htmlの'、地元の人々()要求を)、書き換えリターンmp_renderリターンがレンダリングていた(要求、 '***。htmlの'、地元の人々())ので、同じロジックを残りの完了元のプロジェクトごとに、各リクエストの後に実行テンプレートに渡される前に、ユーザー名、未読メッセージの利用者数の正面図を追加。

            <a class="user-menu right"  href="/notice/list">
                通知
                <i class="fa fa-envelope-o" aria-hidden="true"></i>
                <span class="badge bg-danger">{{ notice_num }}</span>
            </a>

このテンプレートは、今notice_num変数を識別することができます。

公開された24元の記事 ウォン称賛30 ビュー50000 +

おすすめ

転載: blog.csdn.net/yufen9987/article/details/90287268