Maison > développement back-end > Tutoriel Python > Solution au problème selon lequel les modèles Django ne peuvent pas utiliser les variables permanentes

Solution au problème selon lequel les modèles Django ne peuvent pas utiliser les variables permanentes

巴扎黑
Libérer: 2017-09-11 10:37:40
original
1705 Les gens l'ont consulté

Cet article vous présente principalement la méthode pour résoudre le problème du modèle Django qui ne peut pas utiliser les variables permanentes. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour l'étude ou le travail de chacun. qui en a besoin peut suivre Apprenons avec l’éditeur.

Avant-propos

Cet article présente principalement la solution au problème selon lequel le modèle Django ne peut pas utiliser les variables permanentes, et le partage pour votre référence et votre étude . Ci-dessous Pas grand chose à dire, jetons un œil à l'introduction détaillée.

Solution :

Tout d'abord, lorsque vous utilisez le système de gestion des autorisations intégré de Django, ajoutez

aux paramètres Fichier .py

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',
   ],
  },
 },
]
Copier après la connexion

Comment vérifier les autorisations dans les modèles ?

Selon les instructions du site officiel https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions, les autorisations des utilisateurs connectés sont enregistrées dans le template {{ perms }} variable , est une instance du proxy de modèle d'autorisation django.contrib.auth.context_processors.PermWrapper Pour plus de détails, vous pouvez consulter le code source de django/contrib/auth/context_processors.py

Cas de test : <🎜. >

Lors du test, il a été constaté que la variable

n'existait pas du tout et qu'il n'y avait pas de sortie, eh bien, nous ne pouvons obtenir que le code source de ; Déboguer Django {{ perms }}


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

 If there is no &#39;user&#39; attribute in the request, uses AnonymousUser (from
 django.contrib.auth).
 """
 if hasattr(request, &#39;user&#39;):
  user = request.user
 else:
  from django.contrib.auth.models import AnonymousUser
  user = AnonymousUser()
 print(user, PermWrapper(user), &#39;-----------------------&#39;)
 return {
  &#39;user&#39;: user,
  &#39;perms&#39;: PermWrapper(user),
 }
Copier après la connexion
En testant l'interface d'accès, j'ai découvert que certaines interfaces ont des informations d'autorisation d'impression, et d'autres non. Il semble que j'ai soudainement réalisé que

L'interface qui peut imprimer les informations d'autorisation renvoie :



 return render(request, &#39;fms/fms_add.html&#39;, {&#39;request&#39;: request, &#39;form&#39;: form, &#39;error&#39;: error})
Copier après la connexion
Impossible d'imprimer l'autorisation :


.


 return render_to_response( &#39;fms/fms.html&#39;, data)
Copier après la connexion

Différence entre render et render_to_response

render est un moyen plus pratique de rendre des modèles que render_to_reponse. Il utilisera automatiquement RequestContext, tandis que ce dernier doit être ajouté manuellement :


return render_to_response(request, &#39;fms/fms_add.html&#39;, {&#39;request&#39;: request, &#39;form&#39;: form, &#39;error&#39;: error},context_instance=RequestContext(request))
Copier après la connexion
où RequestContext est une sous-classe de

Il accepte django.template.Context et <.>, afin que le contexte soit rempli et rendu au modèle. Le problème est déjà clair En raison de l'utilisation de la méthode request, le modèle ne peut pas être utilisé sans ajouter manuellement context_processors. >

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal