Django 自带的 User 模型(django.contrib.auth.models.User),继承自 AbstractUser 类:
class AbstractUser(AbstractBaseUser, PermissionsMixin): """ An abstract base class implementing a fully featured User model with admin-compliant permissions. Username and password are required. Other fields are optional. """ username_validator = UnicodeUsernameValidator()
username = models.CharField( _('username'), max_length=150, unique=True, help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'), validators=[username_validator], error_messages={ 'unique': _("A user with that username already exists."), }, ) first_name = models.CharField(_('first name'), max_length=30, blank=True) last_name = models.CharField(_('last name'), max_length=150, blank=True) email = models.EmailField(_('email address'), blank=True) is_staff = models.BooleanField( _('staff status'), default=False, help_text=_('Designates whether the user can log into this admin site.'), ) is_active = models.BooleanField( _('active'), default=True, help_text=_( 'Designates whether this user should be treated as active. ' 'Unselect this instead of deleting accounts.' ), ) date_joined = models.DateTimeField(_('date joined'), default=timezone.now) ...
class User(AbstractUser): """ Users within the Django authentication system are represented by this model. Username and password are required. Other fields are optional. """ class Meta(AbstractUser.Meta): swappable = 'AUTH_USER_MODEL'
创建应用
在 mysite 项目中新建一个应用 users:
$ python manage.py startapp users
模型设计
编辑 users/models.py 文件:
from django.contrib.auth.models import User from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE)
date_modified = models.DateTimeField(default=timezone.now) def __str__(self): return self.user.__str__() class Meta: verbose_name = 'User Profile'
数据库设置
数据库我们选择系统默认的 Sqlite,不用修改 mysite/settings.py 配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
然后在终端输入以下命令,来创建 UserProfile 的数据表。
$ python manage.py makemigrations
$ python manage.py migrate
注册APP
在 mysite/settings.py 配置项 INSTALLED_APPS 中添加应用:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users.apps.UsersConfig', ]
视图
1. 登录视图
1. 路由设计
URL | 视图 | 模板 | 说明 |
/login/ | users.views.login() | users/login.html | 登录 |
/index/ | users.views.index() | users/index.html | 主页 |
/register/ | users.views.register() | users/register.html | 注册 |
/logout/ | users.views.logout() | 登出 |
from django.urls import path from . import views app_name = 'users' urlpatterns = [ path('index/', views.index, name='index'), path('login/', views.login, name='login'), path('register/', views.register, name='register'), path('logout/', views.logout, name='logout'), ]
创建模板
新建并编辑模板文件 users/templates/users/login.html: