我尝试使用Django的默认Auth来处理注册和登录.而且我觉得这个程序很标准,但我的错误.
我的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并重新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
有人可以解释并告诉我应该怎么做吗?
./manage.py migrate
如果您刚刚启用了所有中间件等,则会运行每次迁移并添加缺少的表.
你唯一需要做的就是:
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.
这适用于django版本<1.7:
使用命令初始化表
manage.py syncdb
这允许您指定"超级用户"以及初始化任何表.
您可能会收到此错误,因为您正在使用UserCreationForm
modelform,其中META
包含User
(django.contrib.auth.models> User)作为模型.
class Meta: model = User fields = ("username",)
在这里,您使用自己的自定义身份验证模型,因此User
尚未创建与之相关的表.所以在这里你必须使用自己的自定义模型.在Meta类中,模型应该是您的User
(books.User)模型