乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Django的開發(fā)流程與數(shù)據(jù)庫設(shè)計(jì)

       小樣樣樣樣樣樣 2021-05-06

      引言:項(xiàng)目開發(fā)流程:

      1. 需求分析(成員:架構(gòu)師 、產(chǎn)品經(jīng)理 、開發(fā)者組長)
        在跟客戶談需求之前,會(huì)大致先了解客戶的需求,然后自己先設(shè)計(jì)一套比較好寫的方案。跟客戶溝通交流中引導(dǎo)客戶往我們之前想好的方案上面靠,形成一個(gè)初步的方案

      2. 項(xiàng)目設(shè)計(jì)(成員:架構(gòu)師選擇項(xiàng)目的整體設(shè)計(jì)環(huán)境)

        • 編程語言:Java、Python、PHP、C++等;
        • 框架選擇:Django、Flask、SpringMVC等
        • 數(shù)據(jù)庫選擇
          • 主體數(shù)據(jù)庫:MySQL、SQL server、Oracle;
          • 緩存數(shù)據(jù)庫:redis/mongodb/memcacha;
        • 功能劃分:將整個(gè)項(xiàng)目劃分成若干個(gè)功能模塊
        • 找開發(fā)組組長開會(huì):給每個(gè)組分發(fā)任務(wù)
        • 項(xiàng)目報(bào)價(jià)/預(yù)算
          • 技術(shù)類需要多少人、多少天、開發(fā)的設(shè)備成本
          • 產(chǎn)品經(jīng)理層面:售后、客服
        • 公司層面確認(rèn),產(chǎn)品經(jīng)理去跟客戶溝通。后續(xù)需要加功能,繼續(xù)加錢。
      3. 分組開發(fā):組長找組員開會(huì),安排各自的功能模塊
        其實(shí)就是在架構(gòu)師設(shè)計(jì)好的框架里面編寫代碼,在寫代碼的時(shí)候,寫完需要自己先測試是否有bug。如果是一些顯而易見的bug,你沒有避免而是直接交給了測試部門測出來,那你可能就需要被扣績效了(一定要跟測試組搞好關(guān)系);

      4. 測試:測試部門組織成員對模塊、代碼進(jìn)行單元、功能、壓力等測試。

      5. 交付上線

        1. 交給對方的運(yùn)維人員;
        2. 直接上線到我們的服務(wù)器上并收取一定的維護(hù)費(fèi)用;

      一、數(shù)據(jù)庫表的設(shè)計(jì)

      一個(gè)項(xiàng)目中最重要的不是業(yè)務(wù)邏輯的書寫,而是前期的表結(jié)構(gòu)的設(shè)計(jì),只有將表設(shè)計(jì)好了,后續(xù)的功能書寫才能順利完成。否則會(huì)重復(fù)修改表,既影響開發(fā)的效率,也會(huì)導(dǎo)致寫好的業(yè)務(wù)代碼無效。

      1. 用戶表:繼承AbstractUser

      • 擴(kuò)展字段
        1. phone:電話號碼
        2. avatar:用戶頭像
        3. create_time:創(chuàng)建時(shí)間
      • 外鍵字段:【一對一】個(gè)人站點(diǎn)表

      2.個(gè)人站點(diǎn)表

      • 業(yè)務(wù)字段
        1. site_name:站點(diǎn)名稱
        2. site_title 站點(diǎn)標(biāo)題
        3. site_theme 站點(diǎn)樣式(存儲一個(gè)CSS/JS文件)

      3.文章標(biāo)簽表

      • 業(yè)務(wù)字段:name 標(biāo)簽名

      • 外鍵字段:【一對多】個(gè)人站點(diǎn)

      4.文章類別表

      • 業(yè)務(wù)字段:name 類別名
      • 外鍵字段:【一對多】個(gè)人站點(diǎn)

      5.文章表

      • 業(yè)務(wù)字段

        1. title:文章標(biāo)題
        2. desc :文章簡介/摘要
        3. content:文章內(nèi)容
        4. create_time:發(fā)布時(shí)間
      • 數(shù)據(jù)庫字段設(shè)計(jì)優(yōu)化:點(diǎn)贊數(shù)、點(diǎn)踩數(shù)、評論數(shù)(雖然這三個(gè)字段可以從其他表里面可以O(shè)RM跨表查詢計(jì)算得出,但是頻繁跨表效率降低)
        5. up_num:點(diǎn)贊數(shù)
        6. down_num:點(diǎn)踩數(shù)
        7. comment_num:評論數(shù)

      • 外鍵字段

        • 【一對多】個(gè)人站點(diǎn)
        • 【多對多】文章標(biāo)簽表
        • 【一對多】文章分類

      6.點(diǎn)贊點(diǎn)踩表:用來記錄哪個(gè)用戶給哪篇文章點(diǎn)了贊還是點(diǎn)了踩(多對多關(guān)聯(lián)表)

      • 業(yè)務(wù)字段
        • user(用戶的主鍵)
        • article(文章的主鍵)
        • is_up(普通字段 BooleanFied)

      7.文章評論表[comment]:用來記錄哪個(gè)用戶給哪篇文章寫了哪些評論內(nèi)容

      • 業(yè)務(wù)字段
        • user(用戶的主鍵)
        • article(文章的主鍵)
        • content:CharField()
        • comment_time:DateField()
        • 自關(guān)聯(lián)parent ForeignKey(to='Comment',null=True),ORM專門提供的自關(guān)聯(lián)寫法parent ForeignKey(to='self',null=True)

      注:根評論、子評論的概念:根評論就是直接評論當(dāng)前發(fā)布的內(nèi)容的,子評論是評論別人的評論。

      根評論與子評論是一對多的關(guān)系

      二、數(shù)據(jù)庫表創(chuàng)建及同步

      由于django自帶的sqlite數(shù)據(jù)庫對日期不敏感,所以我們換成MySQL

      from django.db import models
      from django.contrib.auth.models import AbstractUser
      # Create your models here.
      """
          先寫普通字段,之后在寫外鍵字段
      """
      class UserInfo(AbstractUser):
          phone = models.BigIntegerField(verbose_name='手機(jī)號',null=True)
          # 用戶頭像,用戶不選頭像則用默認(rèn)頭像
          avatar = models.FileField(upload_to='avatar/',default='avatar/default.png')
          """
              給avatar字段傳文件對象,該文件會(huì)自動(dòng)存儲到avatar文件下
              然后該字段只保存文件路徑avatar/default.png
          """
          create_time = models.DateField(auto_now_add=True)
      
          blog = models.OneToOneField(to='Blog',null=True,on_delete = models.CASCADE)
      
      class Blog(models.Model):
          site_name = models.CharField(verbose_name="站點(diǎn)名稱",max_length=32)
          site_title = models.CharField(verbose_name="站點(diǎn)標(biāo)題",max_length=32)
          # 簡單模擬,認(rèn)識樣式內(nèi)部原理的操作
          site_theme = models.CharField(verbose_name="站點(diǎn)樣式",max_length=64)
          # 存儲用戶自定義的css/js文件
      
      class Category(models.Model):
          name = models.CharField(verbose_name='文章分類',max_length=32)
          blog = models.ForeignKey(to='Blog',null=True,on_delete = models.CASCADE)
      
      class Tag(models.Model):
          name = models.CharField(verbose_name='文章標(biāo)簽',max_length=32)
          blog = models.ForeignKey(to='Blog', null=True,on_delete = models.CASCADE)
      
      class Article(models.Model):
          title = models.CharField(verbose_name='文章標(biāo)題',max_length=64)
          desc = models.CharField(verbose_name='文章摘要',max_length=255)
          # 文章內(nèi)容有很多,一般情況下都是使用TextField
          content = models.TextField(verbose_name='文章內(nèi)容')
          create_time = models.DateField(auto_now_add=True)
      
          # 數(shù)據(jù)庫字段設(shè)計(jì)優(yōu)化
          up_num = models.BigIntegerField(verbose_name='點(diǎn)贊數(shù)',default=0)
          down_num = models.BigIntegerField(verbose_name='點(diǎn)踩數(shù)',default=0)
          comment_num = models.BigIntegerField(verbose_name='評論數(shù)',default=0)
          # 外鍵字段
          blog = models.OneToOneField(to='Blog', null=True,on_delete = models.CASCADE)
          category = models.ForeignKey(to='Category', null=True,on_delete = models.CASCADE)
          tags = models.ManyToManyField(to='Tag',
                                        through='Article2Tag',
                                        through_fields=('article','tag')
                                       )
      
      class Article2Tag(models.Model):
          article = models.ForeignKey(to='Article',on_delete = models.CASCADE)
          tag = models.ForeignKey(to='Tag',on_delete = models.CASCADE)
      
      class UpAndDown(models.Model):
          user = models.ForeignKey(to='UserInfo',on_delete = models.CASCADE)
          article = models.ForeignKey(to='Article',on_delete = models.CASCADE)
          is_up = models.BooleanField()  # 傳入布爾值,存0/1
      
      class Comment(models.Model):
          user = models.ForeignKey(to='UserInfo',on_delete = models.CASCADE)
          article = models.ForeignKey(to='Article',on_delete = models.CASCADE)
          content = models.CharField(verbose_name='評論內(nèi)容',max_length=255)
          comment_time = models.DateTimeField(verbose_name='評論時(shí)間',auto_now_add=True)
          # 自關(guān)聯(lián)
          parent = models.ForeignKey(to='self',null=True,on_delete = models.CASCADE)
          # 有些評論就是根評論
      

      BBS是一個(gè)前后端不分離的全棧個(gè)人博客項(xiàng)目,前端和后端都需要自己一步步的完成。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多