Я пытаюсь использовать аутентификацию Django по умолчанию для обработки регистрации и входа. И я думаю, что процедура довольно стандартная, но моя с sth неправильная.
мой 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'
мой books.models.py:
class User(AbstractUser):
account_balance = models.DecimalField(max_digits=5, decimal_places=2, default=0)
мой 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,})
мой 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
может кто-нибудь объяснить и рассказать мне, что я должен делать?
11 ответов
обновление
вы, вероятно, получаете эту ошибку, потому что вы используете UserCreationForm
modelform, в котором в META
содержит User
(Джанго.ВНО.автор.модели > пользователь) как модель.
class Meta:
model = User
fields = ("username",)
и здесь вы используете свою собственную модель auth, поэтому таблицы, связанные с User
не был создан. Так вот вы должны использовать свой собственный modelform. где в мета-классе модель должна быть вашей User
(книги.Пользователь) модель
./manage.py migrate
Если вы только что включили все промежуточные программы и т. д., это запустит каждую миграцию и добавит отсутствующие таблицы.
Это кажется очень элементарным, но вы инициализировали таблицы командой
manage.py syncdb
Это позволяет назначить «суперпользователя», а также инициализировать любые таблицы.
единственное, что вам нужно сделать, это :
python manage.py migrate
и после этого:
python manage.py createsuperuser
после чего вы можете выбрать имя пользователя и пароль.
вот пример вывода:
Username (leave blank to use 'hp'): admin
Email address: xyz@gmail.com
Password:
Password (again):
Superuser created successfully.
при использовании пользовательской модели аутентификации в подклассе 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',
)
python manage.py затем makemigrations → python manage.py migrate фиксирует его.
предполагая, что приложения определены/установлены в settings.py существует в каталоге проекта.
просто сделайте следующий поток
$ 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
затем он запрашивает имя пользователя и пароль
1
автор: Karthick Sakkaravarthi
Я также столкнулся с той же проблемой «нет такой таблицы: auth_user», когда я пытаюсь развернуть мой сайт Django в виртуальное окружение.
вот мое решение, которое сработало в моем случае:
в вашем settings.py файл, в котором вы определили свой параметр базы данных следующим образом:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(os.getcwd(), 'db.sqlite3'),
}
}
просто найдите свою БД.база данных sqlite3 или любая другая база данных, которую вы используете, и запишите полный путь к вашей базе данных , поэтому теперь параметр базы данных будет выглядеть что-то вроде этого ;
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/django/django_project/db.sqlite3',
}
}
Я надеюсь, что ваша проблема будет решена сейчас.
перед созданием пользовательской модели пользователя необходимо выполнить первую миграцию. Затем установите приложение вашей модели пользователя и добавьте AUTH_USER_MODEL.
а также:
class UserForm(UserCreationForm):
class Meta:
model = User
fields = ("username",)
и
python manage.py migrate auth
python manage.py migrate
пожалуйста, проверьте, сколько экземпляров python работают в фоновом режиме, как в windows go- — — >диспетчер задач и проверить экземпляры python и убить или завершить задачу i.e убить все экземпляры python. запустите снова, используя «py manage.py команда «runserver».
надеюсь, все будет хорошо….
Skip to forum content
My Visual Database
A Simple Solution for Creating Databases
You are not logged in. Please login or register.
Active topics Unanswered topics
Pages 1
You must login or register to post a reply
1 2015-01-12 12:10:12
- iliasidash
- Member
- Offline
- Registered: 2015-01-09
- Posts: 14
Topic: No such table
В чем может быть причина… При запуске программы выдает «No such table «Название таблицы». Таблица есть ссылки все проверил, не могу понять в чем дело!
2 Reply by iliasidash 2015-01-12 12:12:38
- iliasidash
- Member
- Offline
- Registered: 2015-01-09
- Posts: 14
Re: No such table
Добрый день!!!!
Забылся немного))))
3 Reply by DriveSoft 2015-01-12 12:16:21
- DriveSoft
- Administrator
- Offline
- Registered: 2014-02-14
- Posts: 10,294
Re: No such table
В текущей версии при изменении структуры БД, необходимо пересоздавать базу данных, при этом все данные в ней теряются.
После того, как вы изменили структуру существующей БД (например добавили новую таблицу), и запустили проект, Вы должны были получить сообщение:
Структура базы данных была изменена.
Вы желаете пересоздать базу данных?
—————————
Yes No
—————————
Скорей всего вы ответили No, и структура базы данных фактически не была изменена (в файле sqlite.db)
Просто удалите файл базы данных в папке с проектом sqlite.db и при запуске проекта БД будет пересоздана правильно.
В последней бета версии 1.48 эта проблема почти решена
— Реализована возможность создания новых полей в БД без потери данных (08.01.2015)
— Реализована возможность создания и удаления таблиц в БД без потери данных (09.01.2015)
— Реализована возможность удаления полей из таблиц БД без потери данных (10.01.2015)
Осталось реализовать возможность переименования полей и таблиц без потери данных в БД.
Скачать бета версию 1.48 можете здесь
http://myvisualdatabase.com/forum/viewtopic.php?id=781
Dmitry.
4 Reply by Leonid 2015-01-12 14:33:12
- Leonid
- Member
- Offline
- Registered: 2014-07-11
- Posts: 99
Re: No such table
Уже попробовал ! Здорово ! Спасибо !
5 Reply by iliasidash 2015-01-12 15:44:16
- iliasidash
- Member
- Offline
- Registered: 2015-01-09
- Posts: 14
Re: No such table
Большое спасибо!
Posts: 5
Pages 1
You must login or register to post a reply
hope someone can help. I am trying to access my database from a Dynamic Web project in Eclipse. For some reason I keep receiving the following error:
[SQLITE_ERROR] SQL error or missing database (no such table: users)
There definitely is a table called ‘users’ in the books database. I think it could be to do with where I am saving the the database since I know the code I’ve used works fine because I have used it in another part of my project. Screen shot below to show where things are saved. My database is in both the main directory and the web inf directory because my main program needs access to it as well as the server.
My code:
public class Authentication {
private static Connection getDBConnection() {
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
try {
String url = "jdbc:sqlite:books.sqlite";
//Gets connection with the JDBC API
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public String authenticate(String username, String password) throws SQLException {
// TODO maybe removed this line below or change it.
Statement statement = null;
Connection conn = null;
ResultSet results = null;
HashMap<String,String> userPass = new HashMap<String,String>();
// Creates SQL query and adds it to String variable.
String query = "SELECT username, password FROM users";
// TODO Maybe remove the below line, not necessary?
// Book temp = null;
try {
conn = getDBConnection();
statement = conn.createStatement();
results = statement.executeQuery(query);
while (results.next()) {
String Username = results.getString("username");
String Password = results.getString("password");
userPass.put(Username, Password);
}
} finally {
if (results != null)
results.close();
if (statement != null)
statement.close();
if (conn != null)
conn.close();
}
//Returns to newly created bookList to where the method was called.
if (userPass.get(username)== password ) {
return "success";
}
else {
return "error";
}
}
}
hope someone can help. I am trying to access my database from a Dynamic Web project in Eclipse. For some reason I keep receiving the following error:
[SQLITE_ERROR] SQL error or missing database (no such table: users)
There definitely is a table called ‘users’ in the books database. I think it could be to do with where I am saving the the database since I know the code I’ve used works fine because I have used it in another part of my project. Screen shot below to show where things are saved. My database is in both the main directory and the web inf directory because my main program needs access to it as well as the server.
My code:
public class Authentication {
private static Connection getDBConnection() {
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
try {
String url = "jdbc:sqlite:books.sqlite";
//Gets connection with the JDBC API
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public String authenticate(String username, String password) throws SQLException {
// TODO maybe removed this line below or change it.
Statement statement = null;
Connection conn = null;
ResultSet results = null;
HashMap<String,String> userPass = new HashMap<String,String>();
// Creates SQL query and adds it to String variable.
String query = "SELECT username, password FROM users";
// TODO Maybe remove the below line, not necessary?
// Book temp = null;
try {
conn = getDBConnection();
statement = conn.createStatement();
results = statement.executeQuery(query);
while (results.next()) {
String Username = results.getString("username");
String Password = results.getString("password");
userPass.put(Username, Password);
}
} finally {
if (results != null)
results.close();
if (statement != null)
statement.close();
if (conn != null)
conn.close();
}
//Returns to newly created bookList to where the method was called.
if (userPass.get(username)== password ) {
return "success";
}
else {
return "error";
}
}
}