it-swarm.com.de

django: Benutzerregistrierung mit Fehler: keine solche Tabelle: auth_user

Ich versuche, Djangos Standardauthentifizierung für die Registrierung und Anmeldung zu verwenden. Und ich denke, die Prozedur ist ziemlich normal, aber meine ist mit etw falsch.

meine setting.py:

INSTALLED_APPS = (
    'Django.contrib.admin',
    'Django.contrib.auth',
    'Django.contrib.contenttypes',
    'Django.contrib.sessions',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
    'books',
)

MIDDLEWARE_CLASSES = (
    'Django.contrib.sessions.middleware.SessionMiddleware',
    'Django.middleware.common.CommonMiddleware',
    'Django.middleware.csrf.CsrfViewMiddleware',
    'Django.contrib.auth.middleware.AuthenticationMiddleware',
    'Django.contrib.messages.middleware.MessageMiddleware',
    'Django.middleware.clickjacking.XFrameOptionsMiddleware',
)

AUTH_USER_MODEL = 'books.User'

meine books.models.py:

class User(AbstractUser):
    account_balance = models.DecimalField(max_digits=5, decimal_places=2, default=0)

meine ansichten.py:

from Django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/accounts/profile/")
    else:
        form = UserCreationForm()
    return render(request, "registration/register.html", {'form': form,})

meine urls.py

urlpatterns = patterns('',
    (r'^accounts/login/$', login),
    (r'^accounts/logout/$', logout),
    (r'^accounts/profile/$', profile),
    (r'^accounts/register/$', register),
)

Sogar ich habe versucht, die Datei db.sqlite3 zu löschen und erneut python manage.py syncdb, es gibt immer noch diese Fehlermeldung:

OperationalError at /accounts/register/
no such table: auth_user
Request Method: POST
Request URL:    http://127.0.0.1:8000/accounts/register/
Django Version: 1.7b4
Exception Type: OperationalError
Exception Value:    
no such table: auth_user

Kann mir jemand erklären und sagen, was ich tun soll?

29
user2988464

Aktualisieren

Wahrscheinlich erhalten Sie diesen Fehler, weil Sie UserCreationForm modelform verwenden, in der METAUser (Django.contrib.auth.models> User) als Modell enthalten ist.

class Meta:
    model = User
    fields = ("username",)

Und hier verwenden Sie Ihr eigenes benutzerdefiniertes Authentifizierungsmodell, sodass keine mit User verknüpften Tabellen erstellt wurden. Hier müssen Sie also Ihre eigene benutzerdefinierte Modellform verwenden. Wo in der Meta-Klasse sollte das Modell Ihr User (books.User) -Modell sein

16
ruddra
./manage.py migrate

Wenn Sie gerade alle Middlewares usw. aktiviert haben, wird jede Migration ausgeführt und die fehlenden Tabellen hinzugefügt.

55
jmoz

Sie müssen nur Folgendes tun:

python manage.py migrate

und danach:

python manage.py createsuperuser

danach können Sie Benutzername und Passwort auswählen.

hier ist die Beispielausgabe:

Username (leave blank to use 'hp'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
20
Rajiv Sharma

Dies funktioniert für Django Version <1.7:

Initialisieren Sie die Tabellen mit dem Befehl

manage.py syncdb

Auf diese Weise können Sie einen "Superuser" festlegen und Tabellen initialisieren.

12
holdenweb

Wenn Sie ein benutzerdefiniertes Authentifizierungsmodell in Ihrer UserCreationForm-Unterklasse verwenden, müssen Sie sowohl die Methode metaclass als auch clean_username überschreiben, da sie auf eine fest codierte Benutzerklasse verweist (letztere nur bis Django 1.8).

class Meta(UserCreationForm.Meta):
        model = get_user_model()

    def clean_username(self):
        username = self.cleaned_data['username']

        try:
            self.Meta.model.objects.get(username=username)
        except self.Meta.model.DoesNotExist:
            return username

        raise forms.ValidationError(
            self.error_messages['duplicate_username'],
            code='duplicate_username',
        )
3
Kukosk

python manage.py makemigrations dann → python manage.py migrate behebt es.

Vorausgesetzt, die in settings.py definierten/installierten Apps befinden sich im Projektverzeichnis.
1
Jason Muriki

Führen Sie einfach den folgenden Ablauf aus

$ Django-admin createproject <your project name>

unter <your project dict> Art Django-admin createapp <app name>

unter <app name>/admin.py

from Django.contrib import admin
from .models import Post
admin.site.register(Post)

Wechseln Sie zum Stammprojekt. Dann $python manage.py migrate

Dann werden Benutzername und Passwort abgefragt

Ich hatte auch das gleiche Problem "no such table: auth_user", als ich versuchte, eine meiner Django Websites in einer virtuellen Umgebung bereitzustellen.

Hier ist meine Lösung, die in meinem Fall funktioniert hat:

In Ihrer settings.py-Datei, in der Sie Ihre Datenbankeinstellungen wie folgt definiert haben:

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.sqlite3',

        'NAME': os.path.join(os.getcwd(), 'db.sqlite3'),
     }
 }  

suchen Sie einfach Ihre Datenbank db.sqlite3 oder eine andere Datenbank, die Sie verwenden, und notieren Sie sich den vollständigen Pfad Ihrer Datenbank, sodass die Datenbankeinstellung jetzt in etwa so aussieht.

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.sqlite3',
        'NAME': '/home/Django/django_project/db.sqlite3',
    }
}  

Ich hoffe, dass Ihr Problem jetzt behoben wird.

1
Rahul Kant

Bitte überprüfen Sie, wie viele python Instanzen im Hintergrund ausgeführt werden, wie in Windows go ---> Task-Manager, und überprüfen Sie python Instanzen und beenden oder beenden Sie die Task, dh töten Sie alle python Instanzen. Führen Sie den Befehl "py manage.py runserver" erneut aus. Ich hoffe, es wird gut funktionieren ....

1
Vardhman Danole

rufen Sie diesen Befehl auf

python manage.py makemigrations
python manage.py migrate
0
thenish

Am Django 1.11 musste ich dies tun, nachdem ich den Anweisungen in docs https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a gefolgt war -custom-user-model

# create default database:
./manage.py migrate

# create my custom model migration:
# running `./manage.py makemigrations` was not enough
./manage.py makemigrations books
# specify one-off defaults

# create table with users:
./manage.py migrate
0
igo

Wenn Sie Änderungen an Projekt/App vorgenommen haben, führen Sie Folgendes aus:

python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser
0
Suraj Verma

Vor dem Erstellen eines benutzerdefinierten Benutzermodells muss eine erste Migration durchgeführt werden. Installieren Sie dann die Anwendung Ihres Benutzermodells und fügen Sie das AUTH_USER_MODEL hinzu.

Auch:

class UserForm(UserCreationForm):

    class Meta:
        model = User
        fields = ("username",)

und

python manage.py migrate auth
python manage.py migrate
0
calosh