models層---用戶管理
from django.db import models
import hashlib
from django.contrib.auth.models import AbstractUser
models層--基類
- 把公共的字段剿牺,定義在基類,其他類繼承基類即可
class BaseModel(models.Model):
updated_tm = models.DateTimeField(auto_now=True)
created_tm = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
models層--用戶基本信息
- 繼承基類香伴,即可擁有基類的全部字段
- 繼承AbstractUser饺蚊,實現(xiàn)使用自定義用戶列表進行注冊登錄恒序、身份校驗等
- 這里使用密碼MD5加密方式衷咽,后期使用自定義的用戶表做注冊登錄
- 數(shù)據(jù)刪除使用軟刪除方式,依然保留已刪除的數(shù)據(jù)
class UserList(AbstractUser, BaseModel):
user_id = models.AutoField(help_text="用戶id", primary_key=True)
username = models.SlugField(max_length=128, help_text="用戶名", unique=True)
password = models.CharField(max_length=128, help_text="用戶密碼")
is_disable = models.BooleanField(default=False, help_text='是否禁用')
is_delete = models.BooleanField(default=False, help_text='邏輯刪除')
# 指定數(shù)據(jù)庫表信息
class Meta:
db_table = 'user_list'
verbose_name = '用戶基礎信息'
verbose_name_plural = verbose_name
# 重寫save方法蒜绽,新增密碼md5加密邏輯
def save(self, *args, **kwargs):
md5 = hashlib.md5()
md5.update(self.password.encode())
self.password = md5.hexdigest()
super(UserList, self).save(*args, **kwargs)
def delete(self, using=None, keep_parents=False):
"""重寫數(shù)據(jù)庫刪除方法實現(xiàn)邏輯刪除"""
self.is_delete = True
self.save()
models層--用戶登錄信息
- ForeignKey:一對多關聯(lián)用戶基本信息表
- 插拔式連表查詢镶骗,用于序列化器,隨插隨用躲雅,后期具體講
class UserRole(BaseModel):
user_token = models.CharField(max_length=256, help_text="token")
user_info = models.ForeignKey(to=UserList, on_delete=models.DO_NOTHING, db_constraint=False, related_name='user_base', unique=True)
# 指定數(shù)據(jù)庫表信息
class Meta:
db_table = 'user_role'
verbose_name = '用戶登錄信息'
verbose_name_plural = verbose_name
# 插拔式連表查詢
@property
def user_name(self):
return self.user_info.username
@property
def user_id(self):
return self.user_info.user_id
models層--用戶詳情信息
- ForeignKey:一對多關聯(lián)用戶基本信息表
- 插拔式連表查詢鼎姊,用于序列化器,隨插隨用相赁,后期具體講
class UserDetail(BaseModel):
user_email = models.EmailField(blank=True, default="", help_text='用戶郵箱')
user_introduction = models.CharField(max_length=128, help_text="用戶簡介")
nickname = models.CharField(max_length=128, help_text="用戶昵稱")
user_info = models.ForeignKey(to=UserList, on_delete=models.DO_NOTHING, db_constraint=False, related_name='user')
# 指定數(shù)據(jù)庫表信息
class Meta:
db_table = 'user_detail'
verbose_name = '用戶詳情信息'
verbose_name_plural = verbose_name
# 插拔式連表查詢
@property
def user_name(self):
return self.user_info.username
@property
def user_id(self):
return self.user_info.user_id
models層---項目管理
# 引入之前定義的基類此蜈,基類可以放隨意地方
from django.db import models
from auto_test_platform.my_user.models import BaseModel
# Create your models here.
models層--項目基本信息
- 繼承基類,即可擁有基類的全部字段
- 數(shù)據(jù)刪除使用軟刪除方式噪生,依然保留已刪除的數(shù)據(jù)
class ProjectList(BaseModel):
project_id = models.AutoField(help_text="項目id", primary_key=True)
project_name = models.CharField(max_length=128, help_text="項目名稱")
is_disable = models.BooleanField(default=False, help_text='是否禁用')
is_delete = models.BooleanField(default=False, help_text='邏輯刪除')
# 指定數(shù)據(jù)庫表信息
class Meta:
db_table = 'project_list'
verbose_name = '項目基本信息'
verbose_name_plural = verbose_name
def delete(self, using=None, keep_parents=False):
"""重寫數(shù)據(jù)庫刪除方法實現(xiàn)邏輯刪除"""
self.is_delete = True
self.save()
models層--項目詳情信息
- ForeignKey:一對多關聯(lián)項目基本信息表
- 插拔式連表查詢裆赵,用于序列化器,隨插隨用跺嗽,后期具體講
class ProjectDetail(BaseModel):
project_description = models.CharField(max_length=256, help_text="項目描述")
project_info = models.ForeignKey(to=ProjectList, on_delete=models.DO_NOTHING, db_constraint=False, related_name='project_base', unique=True)
# 指定數(shù)據(jù)庫表信息
class Meta:
db_table = 'project_detail'
verbose_name = '項目詳情信息'
verbose_name_plural = verbose_name
# 插拔式連表查詢
@property
def project_id(self):
return self.project_info.project_id
@property
def project_name(self):
return self.project_info.project_name
view層---用戶管理信息
from auto_test_platform.my_user.models import UserList, UserRole, UserDetail
from rest_framework import mixins, generics
# Create your views here.
class UserListView(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, generics.GenericAPIView):
# 查詢未刪除的數(shù)據(jù)战授,數(shù)據(jù)排序方式為新增時間倒序,去掉-桨嫁,即為順序排序
queryset = UserList.objects.filter(is_delete=0).all().order_by('-created_tm')
class UserRoleView(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, generics.GenericAPIView):
# 查詢未刪除的數(shù)據(jù)植兰,數(shù)據(jù)排序方式為新增時間倒序,去掉-璃吧,即為順序排序
queryset = UserRole.objects.filter(is_delete=0).all().order_by('-created_tm')
class UserDetailView(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, generics.GenericAPIView):
# 查詢未刪除的數(shù)據(jù)楣导,數(shù)據(jù)排序方式為新增時間倒序,去掉-畜挨,即為順序排序
queryset = UserDetail.objects.filter(is_delete=0).all().order_by('-created_tm')
view層-項目列表信息
from rest_framework import mixins, generics
from project.project_list.models import ProjectList
# Create your views here.
class ProjectListView(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, generics.GenericAPIView):
# 查詢未刪除的數(shù)據(jù)筒繁,數(shù)據(jù)排序方式為新增時間倒序,去掉-巴元,即為順序排序
queryset = ProjectList.objects.filter(is_delete=0).all().order_by('-created_tm')
view層-項目詳情信息
from rest_framework import mixins, generics
from project.project_detail.models import ProjectDetail
# Create your views here.
class ProjectDetailView(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, generics.GenericAPIView):
# 查詢未刪除的數(shù)據(jù)毡咏,數(shù)據(jù)排序方式為新增時間倒序,去掉-逮刨,即為順序排序
queryset = ProjectDetail.objects.filter(is_delete=0).all().order_by('-created_tm')