美文网首页
django搭建一个问答社区(三)

django搭建一个问答社区(三)

作者: 小鬼客 | 来源:发表于2020-02-12 08:35 被阅读0次

    创建Django的用户注册和登录

    python manage.py startapp authentication
    创建一个用于用户的APP应用
    manager是Django提供数据库查询操作的接口,自定义manager可以实现想要的任何数据操作。
    通过继承BaseUserManger类,实现两个方法
    create_user(): 创建普通用户
    create_superuser(): 创建超级用户

    from django.contrib.auth.models import BaseUserManager
    # Create your models here.
    
    class UserManager(BaseUserManager):
    
        def create_user(self, username, email, password, **kwargs):
            '''
            创建用户
            '''
            if not email:
                raise ValueError("Users must have avalid email!!")
            user = self.model(
                username = username,
                email = self.normalize_email(email),
            )
            user.set_password(password)
            user.save()
            return user
            
        def create_superuser(self, username, email, password, **kwargs):
            """
            创建超级管理用户
            """
            user = self.create_user(username, email, password)
            user.is_admin = True
            user.is_superuser = True
            user.is_staff = True
            user.save()
    
            return user
    
    

    编辑用户的model

    from django.db import models
    from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
    
    from .manager import UserManager
    
    
    class User(AbstractBaseUser, PermissionsMixin):
    
        email = models.EmailField(unique=True)
        username = models.CharField(max_length=100, unique=True)
        is_admin = models.BooleanField(default=False)
        is_staff = models.BooleanField(default=False)
        is_active = models.BooleanField(default=True)
    
        objects = UserManager()
        USERNAME_FIELD = 'username'
        REQUIRED_FIELDS = ['email', ]
        class Meta():
            verbose_name = 'user'
            verbose_name_plural = 'users'
    
        def get_userid(self):
            return User.objects.get(username=self.username).user_id
    

    在settings配置中配置使用重写的User

    AUTH_USER_MODEL = 'app.youruser'
    app: 注册的用户应用,其中需要确保APP已经在installed_apps中添加了
    youruser: 是重写的User模型

    HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.

    解决办法: AUTH_USER_MODEL = '项目名称.User'

    相关文章

      网友评论

          本文标题:django搭建一个问答社区(三)

          本文链接:https://www.haomeiwen.com/subject/zarqfhtx.html