Django待办应用邮箱注册登录报错:core_user表不存在求助
解决Django注册时core_user表不存在的问题及邮箱密码登录实现
一、修复core_user表不存在的错误
- 确认自定义用户模型配置
- 若使用自定义用户模型,必须在
settings.py中指定AUTH_USER_MODEL:# settings.py AUTH_USER_MODEL = 'core.User' - 确保
core应用已加入INSTALLED_APPS:INSTALLED_APPS = [ # 其他内置/第三方应用 'core', ]
- 若使用自定义用户模型,必须在
- 执行数据库迁移
- 若先定义了自定义用户模型再初始化迁移,直接运行:
python manage.py makemigrations core python manage.py migrate - 注意:如果是项目中途修改用户模型,需清空现有数据库(如删除
db.sqlite3)后重新执行迁移,Django不支持中途替换默认用户模型。
- 若先定义了自定义用户模型再初始化迁移,直接运行:
- 检查自定义用户模型定义
确保core/models.py中的用户模型正确继承基类并配置管理器:# core/models.py from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin from django.db import models class UserManager(BaseUserManager): def create_user(self, email, password=None, **extra_fields): if not email: raise ValueError('必须提供邮箱地址') email = self.normalize_email(email) user = self.model(email=email, **extra_fields) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_superuser', True) return self.create_user(email, password, **extra_fields) class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) objects = UserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = []
二、实现邮箱密码注册登录功能
1. 注册视图
# core/views.py from django.contrib.auth import authenticate, login from django.shortcuts import render, redirect from .forms import UserRegistrationForm def register(request): if request.method == 'POST': form = UserRegistrationForm(request.POST) if form.is_valid(): form.save() email = form.cleaned_data.get('email') password = form.cleaned_data.get('password1') user = authenticate(email=email, password=password) login(request, user) return redirect('todo_list') # 替换为你的首页路由名称 else: form = UserRegistrationForm() return render(request, 'core/register.html', {'form': form})
2. 注册表单
# core/forms.py from django import forms from django.contrib.auth.forms import UserCreationForm from .models import User class UserRegistrationForm(UserCreationForm): class Meta: model = User fields = ('email',)
3. 登录视图
# core/views.py def user_login(request): if request.method == 'POST': 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 redirect('todo_list') else: return render(request, 'core/login.html', {'error': '邮箱或密码错误'}) return render(request, 'core/login.html')
4. 注册模板示例(register.html)
<!-- templates/core/register.html --> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">完成注册</button> </form>
5. 路由配置
# core/urls.py from django.urls import path from . import views urlpatterns = [ path('register/', views.register, name='register'), path('login/', views.user_login, name='login'), ]
三、注意事项
- 所有需要引用用户模型的代码,统一使用
get_user_model()而非直接导入:from django.contrib.auth import get_user_model User = get_user_model() - 若之前运行过默认用户模型的迁移,必须清空数据库后重新执行迁移,否则会出现表结构冲突。
内容的提问来源于stack exchange,提问作者Rcacodedev
相关产品推荐
相关产品推荐

