web-dev-qa-db-fra.com

django: enregistrement utilisateur avec erreur: aucune table de ce type: auth_user

J'essaie d'utiliser l'authentification par défaut de Django pour gérer l'enregistrement et la connexion. Et je pense que la procédure est assez standard, mais la mienne est avec mal.

mon 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'

mes books.models.py:

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

mon views.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,})

mon urls.py

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

Même moi, j'ai essayé de supprimer le db.sqlite3 et re python manage.py syncdb, il y a toujours ce message d'erreur:

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

Quelqu'un peut-il m'expliquer et me dire ce que je dois faire?

29
user2988464

Mise à jour

Vous obtenez probablement cette erreur car vous utilisez UserCreationForm modelform, dans lequel dans META il contient User (Django.contrib.auth.models> User) comme modèle.

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

Et ici, vous utilisez votre propre modèle d'authentification personnalisé, donc les tables liées à User n'ont pas été créées. Vous devez donc ici utiliser votre propre modèle personnalisé. où dans la classe Meta, le modèle doit être votre modèle User (books.User)

16
ruddra
./manage.py migrate

Si vous venez d'activer tous les middlewares, etc., cela exécutera chaque migration et ajoutera les tables manquantes.

55
jmoz

La seule chose que vous devez faire est:

python manage.py migrate

et après ça:

python manage.py createsuperuser

après cela, vous pouvez sélectionner le nom d'utilisateur et le mot de passe.

voici l'exemple de sortie:

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

Cela fonctionnera pour Django version <1.7:

Initialisez les tables avec la commande

manage.py syncdb

Cela vous permet de nommer un "super utilisateur" ainsi que d'initialiser toutes les tables.

12
holdenweb

Si vous utilisez un modèle d'authentification personnalisé, dans votre sous-classe UserCreationForm, vous devrez remplacer à la fois la métaclasse et la méthode clean_username car elle fait référence à une classe d'utilisateur codée en dur (cette dernière jusqu'à 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 puis → python manage.py migrate le corrige.

En supposant que les applications définies/installées dans settings.py existent dans le répertoire du projet.
1
Jason Muriki

Faites simplement le flux suivant

$ Django-admin createproject <your project name>

en dessous de <your project dict> tapez Django-admin createapp <app name>

en dessous de <app name>/admin.py

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

Accédez au projet racine. Ensuite $python manage.py migrate

Ensuite, il demande un nom d'utilisateur et un mot de passe

1

J'ai également rencontré le même problème "pas de telle table: auth_user" lorsque j'essayais de déployer l'un de mes sites Web Django dans un environnement virtuel).

Voici ma solution qui a fonctionné dans mon cas:

Dans votre fichier settings.py où vous avez défini votre paramètre de base de données comme ceci:

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

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

localisez simplement votre base de données db.sqlite3 ou toute autre base de données que vous utilisez et notez un chemin complet de votre base de données, de sorte que le paramètre de base de données ressemble maintenant à ceci;

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

J'espère que votre problème sera résolu maintenant.

1
Rahul Kant

Veuillez vérifier le nombre d'instances python qui s'exécutent en arrière-plan, comme dans windows go ---> gestionnaire de tâches et vérifier python instances et tuer ou terminer la tâche, c'est-à-dire tuer tous python instances. exécutez à nouveau en utilisant la commande "py manage.py runserver". J'espère que cela fonctionnera bien ....

1
Vardhman Danole

appeler ces commandes

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

On Django 1.11 J'ai dû le faire après avoir suivi les instructions dans la documentation https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a -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

Si vous avez effectué des modifications dans le projet/l'application, exécutez:

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

Avant de créer un modèle utilisateur personnalisé, une première migration doit être effectuée. Installez ensuite l'application de votre modèle utilisateur et ajoutez AUTH_USER_MODEL.

Ainsi que:

class UserForm(UserCreationForm):

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

et

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