2016-09-19 3 views
0

Ich bin komplett neu in Django. In meinem models.py möchte ich ein Benutzermodell, das Benutzer darstellt, die sich in der Anwendung anmelden.Wie erstelle ich ein Kennwortfeld für ein Benutzermodell in Django?

Ich sehe, wie ich Felder wie fname, lname, E-Mail und Benutzername haben könnte (einfach hinzufügen "first_name = models.CharField (max_length = 50)", aber wie würde ich ein Passwort-Feld haben, so dass Benutzer können authentifiziert werden? Offensichtlich ist es eine schlechte Übung, Passwörter im Klartext zu speichern.

+1

Tun Sie dies nicht, es gibt ein halbes Dutzend erprobte und getestete Benutzerauthentifizierungs-Apps in django. Besonders Django-Allauth sticht hervor. Bitte benutzen Sie einen von ihnen. – e4c5

Antwort

0

Es in django.contrib.auth Benutzermodelle gebaut wird, die Felder hat folgende (Benutzername, Vorname, Nachname, Passwort, E-Mail, Gruppen, user_permissions, is_active, is_staff, is_superuser, last_login, last_joined)

Sie können dieses integrierte Benutzermodell verwenden, indem Sie ein Benutzerobjekt erstellen und ein Kennwort dafür festlegen.

from django.contrib.auth.models import User 
user = User.objects.create(username="username", password = "password", email="email") 
user.save() 

einige Felder in django Benutzermodelle sind optional, außer Benutzername, Passwort und E-Mail und durch Standard setzt es einige Felder wie is_superuser = ‚f‘, wenn Sie nicht angeben.

es wird automatisch speichern Passwort in Hash-Funktion und in Zukunft, wenn Sie irgendwelche Benutzer-Kennwort aktualisieren möchten, können Sie erhalten, und aktualisieren

user = User.objects.get(username="username") 
user.set_password("password") 
user.save() 

Sie können eine aktuelle Online-Benutzerinstanz von request.user erhalten

1

Djangos eigene AbstractBaseUser Umsetzung:

@python_2_unicode_compatible 
class AbstractBaseUser(models.Model): 
    password = models.CharField(_('password'), max_length=128) 
    last_login = models.DateTimeField(_('last login'), blank=True, null=True) 

Sie speichern das Kennwort in einem CharField, was Sie nicht tun speichern ist es rein da, in der Tat die set_password für den Benutzer wie unter Aufruf

user.set_password("Password") 

Würde Hash "Passwort" und speichern Sie es in die CharField.

bearbeiten

Wenn Sie Ihre Klasse nicht auf AbstractBaseUser Basis und eine User Klasse von Grund auf neu implementieren möchten, müssen Sie alle Passwörter Hash und sie dann speichern. Um die Passwörter zu hashen, können Sie die make_password Funktion verwenden.

from django.contrib.auth.hashers import make_password 
hashed_password = make_password(raw_password) 
+0

Was ist, wenn ich keine eingebauten Klassen verwenden möchte? Kann es noch getan werden? – arun8r

+0

Ja, es kann, sehen Sie die aktualisierte Antwort. Sie müssen grundsätzlich die Methode ** make_password ** verwenden. – SpiXel

+0

@ arun8r Wenn eine der Antworten Ihnen bei Ihrem Problem geholfen hat, nehmen Sie sich bitte die Zeit und akzeptieren Sie die Antwort, indem Sie auf das Häkchen in der Nähe der Stimmen der Antwort klicken. – SpiXel

Verwandte Themen