Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung des Problems, dass Django-Vorlagen keine Perms-Variablen verwenden können

Lösung des Problems, dass Django-Vorlagen keine Perms-Variablen verwenden können

巴扎黑
巴扎黑Original
2017-09-11 10:37:401689Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die Methode zur Lösung des Problems vor, dass die Django-Vorlage keine Perms-Variablen verwenden kann. Der Artikel stellt sie ausführlich anhand von Beispielcode vor. Es hat einen gewissen Referenz-Lernwert für alle, die lernen oder arbeiten Wer es braucht, kann folgen. Lasst uns gemeinsam mit dem Herausgeber lernen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich die Lösung für das Problem vor, dass die Django-Vorlage keine Perms-Variablen verwenden kann, und stellt sie Ihnen als Referenz zur Verfügung und weiter unten: Es gibt nicht viel zu sagen, werfen wir einen Blick auf die ausführliche Einführung.

Lösung:

Wenn Sie das integrierte Berechtigungsverwaltungssystem von Django verwenden, fügen Sie zunächst

zu den Einstellungen hinzu .py-Datei

INSTALLED_APPS添加:
'django.contrib.auth',

 
MIDDLEWARE添加:
'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.auth.context_processors.auth',
TEMPLATES = [
 {
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [os.path.join(BASE_DIR, 'templates')],
  'APP_DIRS': True,
  'OPTIONS': {
   'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.i18n',
    'django.template.context_processors.media',
    'django.template.context_processors.static',
    'django.template.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
   ],
  },
 },
]

Wie überprüfe ich Berechtigungen in Vorlagen?

Gemäß den offiziellen Website-Anweisungen https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions werden die angemeldeten Benutzerberechtigungen im gespeichert Die Variable template {{ perms }} ist eine Instanz des Berechtigungsvorlagen-Proxys django.contrib.auth.context_processors.PermWrapper. Weitere Informationen finden Sie im Quellcode django/contrib/auth/context_processors.py

Testfall:

Während des Tests wurde festgestellt, dass die Variable {{ perms }} überhaupt nicht existierte und es keine Ausgabe gab; nun, wir können nur den Quellcode von erhalten Debuggen Sie Django


def auth(request):
 """
 Returns context variables required by apps that use Django's authentication
 system.

 If there is no 'user' attribute in the request, uses AnonymousUser (from
 django.contrib.auth).
 """
 if hasattr(request, 'user'):
  user = request.user
 else:
  from django.contrib.auth.models import AnonymousUser
  user = AnonymousUser()
 print(user, PermWrapper(user), '-----------------------')
 return {
  'user': user,
  'perms': PermWrapper(user),
 }

Beim Testen der Zugriffsschnittstelle habe ich festgestellt, dass einige Schnittstellen Druckberechtigungsinformationen haben, andere jedoch nicht. Es scheint, dass mir das plötzlich klar geworden ist

Die Schnittstelle, die Berechtigungsinformationen drucken kann, gibt Folgendes zurück:


 return render(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error})

Die neue Schnittstelle gibt Folgendes zurück:


 return render_to_response( 'fms/fms.html', data)

Unterschied zwischen render und render_to_response

render ist eine bequemere Möglichkeit, Vorlagen zu rendern als render_to_reponse. Es wird automatisch RequestContext verwendet, während letzterer manuell hinzugefügt werden muss:


return render_to_response(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error},context_instance=RequestContext(request))

wobei RequestContext eine Unterklasse von django.template.Context ist. Es akzeptiert request und context_processors, damit der Kontext gefüllt und in die Vorlage gerendert wird. Aufgrund der Verwendung der render_to_response-Methode kann die Vorlage nicht verwendet werden, ohne context_instance=RequestContext(request)Variable

Das obige ist der detaillierte Inhalt vonLösung des Problems, dass Django-Vorlagen keine Perms-Variablen verwenden können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn