Django 用户注册与登录

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:

猜你喜欢

转载自www.cnblogs.com/yutb/p/10656346.html