OperationalError at /register/ no such table: CustomUser
models.py
from django.db import models
class CustomUser(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(unique=True)
password = models.CharField(max_length=100)
address = models.CharField(max_length=255)
adharcard = models.CharField(max_length=12, unique=True)
age = models.PositiveIntegerField()
phone = models.CharField(max_length=15)
class Meta:
db_table = 'CustomUser'
def __str__(self):
return self.email
views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.contrib.auth.hashers import make_password
from django.views import View
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from .models import CustomUser
def home(request):
return render(request, 'app/login.html')
def register(request):
if request.method == 'POST':
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
email = request.POST.get('email')
password = request.POST.get('password')
address = request.POST.get('address')
adharcard = request.POST.get('adharcard')
phone = request.POST.get('phone')
age = request.POST.get('age')
hashed_password = make_password(password)
user = CustomUser.objects.create(
first_name=first_name,
last_name=last_name,
email=email,
password=hashed_password,
address=address,
adharcard=adharcard,
phone=phone,
age=age
)
user.save()
return redirect('app/login.html')
return render(request, 'app/register.html')
class LoginView(View):
"""
Login view for the user.
Returns:
Response: indicating the result of the login attempt.
- If successful, redirects to the dashboard.
- If the user is not found, renders the login page with an error message.
- If the password is incorrect, renders the login page with an error message.
"""
def get(self, request):
return render(request, 'app/login.html')
def post(self, request, *args, **kwargs):
email = request.POST.get('email')
password = request.POST.get('password')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse('app/dashboard.html'))
else:
return render(request, 'app/login.html', {'error_message': 'Invalid email or password'})
@login_required
def dashboard(request):
user_first_name = request.user.first_name
return render(request, 'app/dashboard.html', {'user_first_name': user_first_name})
Ошибка:
Операционная ошибка в /register/ нет такой таблицы: CustomUser Вышеуказанное исключение (нет такой таблицы: CustomUser) было непосредственной причиной следующего исключения: D:\Platevisionx\myenv\Lib\site-packages\django\core\handlers\exception.py, line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ ... Local vars D:\Platevisionx\myenv\Lib\site-packages\django\core\handlers\base. py, строка 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... Local vars D:\Platevisionx\platevision\app\views.py, строка 28, in register user = CustomUser.objects.create( ... Local vars
Я не могу решить ошибку Я запустил python manage.py makemigrations и python manage.py migrate, но это не работает для меня.
Пожалуйста, кто-нибудь подскажите мне проблему, я использую sqlite3 в Django
установите db_table = 'custom_user' и снова запустите миграцию. Попробуйте этот метод.
Проблемы :-
1 )
Вы пытаетесь использовать пользовательское поле пароля. Но вы используете встроенный в django бэкенд аутентификации. Как показано ниже.
from django.contrib.auth import authenticate, login
user = authenticate(request, email=email, password=password)
login(request, user)
<<<Функции Above login и authenticate являются встроенными методами встроенной в django системы аутентификации. Они не используют ваше поле для ввода пароля в models.py.
2 )
Потенциальные проблемы миграции.
Ответы :-
1 )
1) Я предлагаю вам использовать встроенную в django систему авторизации. Django уже включает в себя встроенную систему авторизации, которую вы можете настроить под свои нужды.
2) Напишите собственный бэкенд аутентификации. Сделать собственный бэкенд аутентификации не очень сложно. Это единственный способ заставить это работать, если вы хотите продолжать использовать пользовательские поля паролей в моделях.
Примеры :-
2 )
Удалите старые миграции. Затем запустите makemigrations и migrate.