第二天:django+vue 編寫models層和view層基礎(chǔ)

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,實(shí)現(xiàn)使用自定義用戶列表進(jìn)行注冊登錄、身份校驗(yà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 = '用戶基礎(chǔ)信息'
        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ù)庫刪除方法實(shí)現(xiàn)邏輯刪除"""
        self.is_delete = True
        self.save()

models層--用戶登錄信息

  • ForeignKey:一對多關(guān)聯(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:一對多關(guān)聯(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層---項(xiàng)目管理

# 引入之前定義的基類,基類可以放隨意地方
from django.db import models
from auto_test_platform.my_user.models import BaseModel
# Create your models here.

models層--項(xiàng)目基本信息

  • 繼承基類,即可擁有基類的全部字段
  • 數(shù)據(jù)刪除使用軟刪除方式,依然保留已刪除的數(shù)據(jù)
class ProjectList(BaseModel):
    project_id = models.AutoField(help_text="項(xiàng)目id", primary_key=True)
    project_name = models.CharField(max_length=128, help_text="項(xiàng)目名稱")
    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 = '項(xiàng)目基本信息'
        verbose_name_plural = verbose_name

    def delete(self, using=None, keep_parents=False):
        """重寫數(shù)據(jù)庫刪除方法實(shí)現(xiàn)邏輯刪除"""
        self.is_delete = True
        self.save()

models層--項(xiàng)目詳情信息

  • ForeignKey:一對多關(guān)聯(lián)項(xiàng)目基本信息表
  • 插拔式連表查詢,用于序列化器,隨插隨用,后期具體講
class ProjectDetail(BaseModel):
    project_description = models.CharField(max_length=256, help_text="項(xiàng)目描述")
    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 = '項(xiàng)目詳情信息'
        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ù)排序方式為新增時(shí)間倒序,去掉-,即為順序排序
    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ù)排序方式為新增時(shí)間倒序,去掉-,即為順序排序
    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ù)排序方式為新增時(shí)間倒序,去掉-,即為順序排序
    queryset = UserDetail.objects.filter(is_delete=0).all().order_by('-created_tm')

view層-項(xiàng)目列表信息

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ù)排序方式為新增時(shí)間倒序,去掉-,即為順序排序
    queryset = ProjectList.objects.filter(is_delete=0).all().order_by('-created_tm')

view層-項(xiàng)目詳情信息

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ù)排序方式為新增時(shí)間倒序,去掉-,即為順序排序
    queryset = ProjectDetail.objects.filter(is_delete=0).all().order_by('-created_tm')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容