カスタム テンプレート タグとフィルタを作成できます。ただし、これはある程度までは役立つ場合があります。さらに、カスタムの context_processors (および必要に応じてカスタムのミドルウェア) を作成する必要があります。
ただし、カスタム関数を使用して認証と権限チェックを行うのは非常に困難ですが、可能です。カスタム認証/承認でシステムを完全に実行しています。
まず、djangocontext_processors
を調べて、それらがどのように機能するかを理解できます。その後、カスタムを書くことができますcontext_processor
。設定にコンテキスト プロセッサを追加すると、これらのメソッドを使用して、必要に応じて認証/承認を行うことができます。
私のカスタムcontect_processor
関数の1つは次のようなものです:
from django.utils.functional import lazy
def CustomProcessor(request):
cust_perms = {
'admin_perm_check': lazy(lambda: myCustomPermChecker(request), myCustomPermChecker)(),
'system_admin': aFunctionToReturnBoolValue(),
}
return custom_perms
class myCustomPermChecker(object):
def __init__(self, request):
self.request = request
def __getitem__(self, perm_name):
return True if (perm_name in user_perm_list()) else False
テンプレートで
{%if admin_perm_check.perm_name%}...{%endif%}
{%if system_admin %} this is a bool check{%endif%}
__getitem__
テンプレートタグが機能するように、permchecker をメソッドを持つクラスとして定義する必要がありますadmin_perm_check.perm_name
。この perm チェッカーは、1 つの追加パラメーター ( perm_name
) のみを受け入れます。django スタイルの 2 つのパラメーター チェックを使用する場合は、次のようにする必要があります。
class myCustomPermChecker(object):
def __init__(self):
pass
def __getitem__(self, module_name):
return SecondPermCheckerStep(module_name)
class SecondPermCheckerStep(object):
def __init__(self, module_name):
self.module_name = module_name
def __getitem__(self, perm_name)
return True if ('%s.%s' % (self.module_name,perm_name) in user_perm_list()) else False
{%if admin_perm_check.module_name.perm_name%}
別のキーを使用class.__getitem__
して、テンプレートなどのツアー タグ チェーンにもう 1 つキーを追加できます。
context_processorはオブジェクトをパラメーターとしてCustomProcessor(request):
受け入れるhttp.request
ため、認証または承認に必要な任意の値 (セッション ID またはユーザー ID など) をメソッドまたは関数に渡すことができます。カスタム値をリクエストオブジェクトに設定して使用するミドルウェアを作成できます(django set user
instanceのようrequest.user
に、ビューで使用できます)。テンプレート (request_context で設定した場合) やビュー (ミドルウェアで設定した場合) で使用できるように、カスタム ユーザー モデル インスタンスを設定することもできます。
ここではドキュメントを読んでもあまり役に立ちません。django コードをチェックして、django がこれをどのように処理するかを確認することをお勧めします。