2017-10-19 23 views
0

Ce que je suis en train de faire est la suivante:recherche django l'authentification utilisateur ne fonctionne pas correctement

1. Retrieve a User record (from the DJango authentication system) is in 
    the DB 
2. get the Username (from that record) 
3. Use the "username" to look for a record in a *different* table. 
4. If the record *is not* there (in the *different* table), then create one. 

Je reçois une erreur sur ce qui ressemble à la requête dans la table utilisateur, même si je suit dans la views.py

from django.contrib.auth.models import User

en outre, on ne sait pas pourquoi le DoesNotExist erreur a lieu (quand on cherche de l'utilisateur dans le système d'authentification). Pourquoi ai-je cette erreur?

TIA

Ceci est le message d'erreur enter image description here

Voici comment la "app" est structuré

enter image description here

views.py

from django.shortcuts import render 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse 
from authinduction.models import Mstrauthownerrdx 
from django.contrib.auth.models import User 

def inductowner(request): 

    username = request.POST.get('username') 
    user = User.objects.get(username=username) 

    myprofile = user.userprofileinfo 

    num_results = Mstrauthownerrdx.objects.filter(logonid=username).count() 

    if not (num_results == 0 or num_results == 1): 
     raise ValueError('Number of items found '+ num_results + ' is not valid') 

    if num_results == 0: 
     u = Mstrauthownerrdx.objects.create(logonid=username, emailaddr=user.email, 
       worktype=1, memo='OWNER', active=1, formpagelastfilled=myprofile.lastpgprocno, 
       formcomplete=myprofile.nextpgprocno, reclocktype=1, reclockid=1) 

     u.save() 

    return render(request, 'authinduction/owner/index.html') 

Répondre

0

L'utilisateur que vous essayez d'obtenir n'existe pas. Essayez de savoir ce que dit exactement votre variable username et vérifiez-la avec la base de données dans l'admin. Vous verrez que ça n'existe pas. Par exemple, vous pouvez faire ce qui suit pour intercepter l'erreur:

try: 
    user = User.objects.get(username=username) 
    myprofile = user.userprofileinfo 
    num_results = Mstrauthownerrdx.objects.filter(logonid=username).count() 
except User.DoesNotExist: 
    num_results = 0 
+0

merci pour la réponse. J'ai vu que la raison pour laquelle je n'obtenais pas la valeur de revenir est parce que cette partie du code: "username = request.POST.get ('nom d'utilisateur')" renvoyait None. –

0

Vous envoyez une requête GET. Dans votre code, vous essayez d'obtenir le nom d'utilisateur du paramètre POST username. Comme la vue n'a pas de nom d'utilisateur, votre vue tente d'aller chercher l'objet User sans aucun username qui, je le crains, n'existe pas dans votre base de données.

Pour le corriger, vous devez passer le username en tant que paramètre GET ou envoyer une requête POST avec username en tant que paramètre.