Django: Регистрация пользователя с ошибкой: нет такой таблицы: auth_user
Я пытаюсь использовать Django default Auth для обработки регистра и входа в систему. И я думаю, что эта процедура довольно стандартная, но моя с ошибкой.
my 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'
my books.models.py:
class User(AbstractUser):
account_balance = models.DecimalField(max_digits=5, decimal_places=2, default=0)
my 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,})
my urls.py
urlpatterns = patterns('',
(r'^accounts/login/$', login),
(r'^accounts/logout/$', logout),
(r'^accounts/profile/$', profile),
(r'^accounts/register/$', register),
)
Даже я попытался удалить db.sqlite3 и re python manage.py syncdb
, все еще это сообщение об ошибке:
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
Может кто-нибудь объяснить и сказать мне, что я должен делать?
Ответы
Ответ 1
Update
Вероятно, вы получаете эту ошибку, потому что используете модель UserCreationForm
modelform, в которой в META
она содержит User
(django.contrib.auth.models > Пользователь) в качестве модели.
class Meta:
model = User
fields = ("username",)
И здесь вы используете свою собственную пользовательскую модель auth, поэтому таблицы, связанные с User
, не были созданы. Таким образом, здесь вы должны использовать свою собственную модель модели. где в классе Meta модель должна быть вашей моделью User
(books.User)
Ответ 2
./manage.py migrate
Если вы только что включили все посредники и т.д., это приведет к каждой миграции и добавит недостающие таблицы.
Ответ 3
Единственное, что вам нужно сделать, это:
python manage.py migrate
и после этого:
python manage.py createsuperuser
после этого вы можете выбрать имя пользователя и пароль.
Вот пример вывода:
Username (leave blank to use 'hp'): admin
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
Ответ 4
Это будет работать для версии django <1.7:
Инициализировать таблицы командой
manage.py syncdb
Это позволяет вам назначать "суперпользователя", а также инициализировать любые таблицы.
Ответ 5
При использовании пользовательской модели auth в вашем подклассе UserCreationForm вам придется переопределить метод metaclass и clean_username, поскольку он ссылается на жесткий код пользователя (последний только до 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',
)
Ответ 6
Я также столкнулся с той же проблемой "нет такой таблицы: auth_user", когда я пытался развернуть один из моих сайтов Django в виртуальной среде.
Вот мое решение, которое работало в моем случае:
В файле settings.py, где вы определили настройки своей базы данных следующим образом:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(os.getcwd(), 'db.sqlite3'),
}
}
просто найдите свою базу данных db.sqlite3 или любую другую базу данных, которую вы используете, и запишите полный путь к базе данных, поэтому теперь настройка базы данных будет выглядеть примерно так:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/django/django_project/db.sqlite3',
}
}
Я надеюсь, что ваша проблема будет решена.
Ответ 7
python manage.py makemigrations then → python manage.py migrate исправляет его.
Предполагая, что приложения, установленные/установленные в settings.py, существуют в каталоге проекта.
Ответ 8
Пожалуйста, проверьте, сколько экземпляров python работает в фоновом режиме, например, в windows go --- > диспетчере задач и проверяет экземпляры python и убивает или завершает работу. i.e убивает все экземпляры python. снова запустите команду "py manage.py runningerver".
я надеюсь, что это будет хорошо работать....
Ответ 9
В Django 1.11 я должен был сделать это после выполнения инструкций в документах 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
Ответ 10
Просто выполните следующий поток
$ django-admin createproject <your project name>
под <your project dict>
тип django-admin createapp <app name>
в разделе <app name>/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
Перейдите в корневой проект. Затем $python manage.py migrate
Затем он запрашивает имя пользователя и пароль.
Ответ 11
Если Вы сделали какие-либо изменения в проекте/приложении, выполните:
python manage.py migrate
python manage.py makemigrations
python manage.py createsuperuser
Ответ 12
вызвать эти команды
python manage.py makemigrations
python manage.py migrate
Ответ 13
Перед созданием пользовательской модели необходимо выполнить первую миграцию. Затем установите приложение вашей модели пользователя и добавьте AUTH_USER_MODEL.
Также:
class UserForm(UserCreationForm):
class Meta:
model = User
fields = ("username",)
и
python manage.py migrate auth
python manage.py migrate
Ответ 14
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
Username : admin
Password : 12345678
python manage.py runserver