2016-06-01 3 views
0

Bei der Online-Suche nach, wie benutzerdefinierte Authentifizierung in Django erreichen, stieß ich auf this und this Artikel. In beiden Artikeln wurden dieselben Anweisungen angegeben. Momentan habe ich so etwas. (Entnommen erster Artikel)benutzerdefinierte Authentifizierung im Backend - Erstellen Benutzer zur Laufzeit ohne zu speichern

class Client(models.Model): 
    email = models.EmailField(unique=True, max_length=100) 
    password = models.CharField(max_length=128) 

Dann in einer anderen Python-Datei Ich habe diese

from .models import Client 

class ClientAuthBackend(object): 

    def authenticate(self, username=None, password=None): 
     try: 
      user = Client.objects.get(email=username) 
      return user 

      if password == 'master': 
       # Authentication success by returning the user 
       return user 
      else: 
       # Authentication fails if None is returned 
       return None 
     except Client.DoesNotExist: 
      return None 

    def get_user(self, user_id): 
     try: 
      return Client.objects.get(pk=user_id) 
     except Client.DoesNotExist: 
      return None 

Ich habe gerade angefangen Django verwenden und Art übersprungen von dem Modellbereich für db da Interaktion in meinem aktuellen Projekt I verwende aus bestimmten Gründen RAW und Custom SQL. Meine Frage ist, wo hat der

user = Client.objects.get(email=username) 

von seinem Benutzer erhalten. Muss ich in eine Datenbank einsteigen? Was ich tun möchte, ist ein Benutzer während der Laufzeit zu erstellen und nicht auf die database.I speichern versucht, diese

#The following creates and saves a user in the db 
u =User.objects.create_user('john', '[email protected]', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message") 

tun Die oben gibt eine Client.DoesNotExist Ausnahme.

Antwort

0

Meine Frage ist, wo das tut

user = Client.objects.get(email=username) 

seine Benutzer erhalten von

Offenbar Client ein models.Model ist. Dies bedeutet, dass ein einzelner Datensatz der relevanten Tabelle in Ihrer Datenbank dargestellt wird, unabhängig davon, welche Einstellung von der entsprechenden Einstellung abhängt.

Daher kann die Tabelle, die dieses Modell darstellt, mit der nächsten Django-Migration und vielen anderen nützlichen Dingen, die Django zulässt, erstellt werden.

So im Wesentlichen die obige Anweisung anweist, die Django ORM alle Client Datensätze aus dieser bestimmten Tabelle mit dieser bestimmten E-Mail abrufen. Wenn solche Einträge nicht vorhanden sind, wird keiner zurückgegeben.

ich versucht, dieses Diese

u =User.objects.create_user('john', '[email protected]', 'johnpassword',cust_address="my_custom_address",cust_msg="Users custom message") 

tun ist, wo man die Dinge ein wenig komplizierter. Die create_user Methode ist nicht Teil von Django ORM, sondern Teil der Django default auth model managerdjango.contrib.auth.models.User. Sie sollten diese Methode entweder selbst bereitstellen oder einfach die Standardmethode create verwenden, die mit dem Standardmodellmanager von Django bereitgestellt wird.

Das Speichern des Benutzermodells selbst bei einigen Caches ist überhaupt nicht sinnvoll, da der Benutzer sich jedes Mal registrieren muss, wenn er sich anmelden möchte.

Nachdem all diese gesagt wurden, empfehle ich Ihnen dringend, die offizielle Django-Dokumentation zu lesen. Alle oben genannten sind abgedeckt, die Dokumentation ist sehr umfangreich und nicht so lange. Sie können dann Tutorials zum Thema Wild lesen und verstehen, die möglicherweise richtig oder aktuell sind.

Nehmen Sie eine gute Lektüre speziell auf der Customizing authentication topic, da es zusätzliche Methoden viel einfacher für den Anfänger bietet.

Verwandte Themen