第二天:django+vue 編寫models層和view層基礎

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')
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呕缭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子修己,更是在濱河造成了極大的恐慌恢总,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬愤,死亡現(xiàn)場離奇詭異片仿,居然都是意外死亡,警方通過查閱死者的電腦和手機戴涝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門滋戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钻蔑,“玉大人,你說我怎么就攤上這事奸鸯∵湫Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵娄涩,是天一觀的道長窗怒。 經(jīng)常有香客問我,道長蓄拣,這世上最難降的妖魔是什么扬虚? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮球恤,結果婚禮上辜昵,老公的妹妹穿的比我還像新娘。我一直安慰自己咽斧,他們只是感情好堪置,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著张惹,像睡著了一般舀锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛逗,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天坎匿,我揣著相機與錄音,去河邊找鬼雷激。 笑死替蔬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侥锦。 我是一名探鬼主播进栽,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼德挣,長吁一口氣:“原來是場噩夢啊……” “哼恭垦!你這毒婦竟也來了?” 一聲冷哼從身側響起格嗅,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤番挺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屯掖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玄柏,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年贴铜,在試婚紗的時候發(fā)現(xiàn)自己被綠了粪摘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瀑晒。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徘意,靈堂內(nèi)的尸體忽然破棺而出苔悦,到底是詐尸還是另有隱情,我是刑警寧澤椎咧,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布玖详,位于F島的核電站,受9級特大地震影響勤讽,放射性物質(zhì)發(fā)生泄漏蟋座。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一脚牍、第九天 我趴在偏房一處隱蔽的房頂上張望向臀。 院中可真熱鬧,春花似錦诸狭、人聲如沸飒硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽三娩。三九已至,卻和暖如春妹懒,著一層夾襖步出監(jiān)牢的瞬間雀监,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工眨唬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留会前,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓匾竿,卻偏偏與公主長得像瓦宜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岭妖,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容