vlambda博客
学习文章列表

Django管理系统后端开发1

  • 后端开发准备工作

  • 配置数据库

  • 更改模板文件路径

  • 配置静态文件路径

  • 配置时区及其相关

  • 配置static过滤器

  • 模板标记

  • 关于用户系统:

  • 自定义User模型:

  • 继承自django内置user系统

  • 使用shortuuid作为主键

  • model.py文件

  • 待解决


后端开发准备工作

  1. 配置数据库
  2. 配置模板文件的路径
  3. 配置时区
  4. 配置模板的static过滤器

配置数据库

DATABASES = {
    'default': {
        'ENGINE''django.db.backends.mysql',
        'NAME''ziwu2',
        'HOST''127.0.0.1',
        'PORT''3306',
        'USER''root',
        'PASSWORD''root',
    }
}

更改模板文件路径

新建项目后django模板默认配置是在主文件夹下,因为我的模板放在front下,所以需要进行修改Django管理系统后端开发1

配置静态文件路径

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'front','dist')
]

配置时区及其相关

Django管理系统后端开发1
tp.png

配置static过滤器

在模板中配置该过滤器后就不需要以后再在HTML中load static了

'builtins':[
    'django.templatetags.static'
],

具体位置:在templates->options内配置Django管理系统后端开发1

模板标记

  1. 在视图中render HTML页面时可能出现不会提示的现象,原因是更改了django自带的templates模板文件夹,这时我们需要将现在的template文件夹标记为模板文件夹 template folder标记文件夹为模板文件夹

02User模型创建

关于用户系统:

  1. 使用django内置的user系统
  2. 需要重新定制
  3. 前台使用的是同一个USer系统

自定义User模型:

  1. 创建一个zwauth的app,用来管理用户系统。
    • 不能创建auth的app,django已经使用了
  2. 全部重写,继承自AbstractBaseUser。
  3. 定义UserManager。
  4. 设置AUTH_USER_MODEL。
  5. 映射到数据库中

继承自django内置user系统

from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin

使用shortuuid作为主键

安装:

pip install django-shortuuidfield

导入:

from shortuuidfield import ShortUUIDField

model.py文件

from django.db import models
from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager
from shortuuidfield import ShortUUIDField
from django.db  import models


class UserManager(BaseUserManager):
    # 受保护的方法,不能在类外面被访问
    def _create_user(self,telephone,username,password,**kwargs):
        if not telephone:
            raise ValueError('请传入手机号码!')
        if not username:
            raise ValueError('请传入用户名!')
        if not password:
            raise ValueError('请传入密码!')

        user = self.model(telephone=telephone,username=username,**kwargs)
        user.set_password(password)
        user.save()
        return user

    def create_user(self,telephone,username,password,**kwargs):
        # 创建普通用户的
        kwargs['is_superuser'] = False
        return self._create_user(telephone,username,password,**kwargs)

    def create_superuser(self,telephone,username,password,**kwargs):
        kwargs['is_superuser'] = True
        kwargs['is_staff'] = True
        return self._create_user(telephone,username,password,**kwargs)


class User(AbstractBaseUser,PermissionsMixin):
    # 不使用默认自增长的主键
    uid = ShortUUIDField(primary_key=True,verbose_name='主键')
    telephone = models.CharField(max_length=11,unique=True,verbose_name='手机号码')
    # password = models.CharField(max_length=200,verbose_name='密码')
    email = models.EmailField(null=True,blank=True,verbose_name='邮箱')
    username = models.CharField(max_length=100,verbose_name='用户名')
    is_active = models.BooleanField(default=True,verbose_name='账号状态')
    is_staff = models.BooleanField(default=False,verbose_name='员工')
    data_joined = models.DateTimeField(auto_now_add=True,verbose_name='加入时间')

    # 用来作为验证的字段,如果没有写,那么默认使用的时username
    USERNAME_FIELD = 'telephone'
    # 在命令创建管理员时会要求输入:username, telephone, password
    REQUIRED_FIELDS = ['username']
    # 给指定用户发送邮件的,会根据这个字段发送
    EMAIL_FIELD = 'email'

    objects = UserManager()

    def get_full_name(self):
        return self.username

    def get_short_name(self):
        return self.username

待解决

  • 未定义AUTH_USER_MODEL = ''的错误 映射是发生错误解决:待解决

  • 在django3.1版本中我已经定义了这个,但还是报错了

    • 在django2.2版本中未报错
    • 待解决


文案:子午

责编:子午