個人博客開發之 項目表結構設計


  

項目源碼下載:http://download.vhosts.cn

 

思考:

博客主要用於文章、圖片、視頻等資訊內容發布, 既然是發布類站點,首先得有發布的內容,然后需要有人對其進行管理,還需要可以評論,如果后期有會員機制還需要有登錄和用戶中心等。所以基本可以分為兩大類,一類為發布內容,一類為用戶管理。

    image.png 

有了數據表結構邏輯之后,可以區分apps 模塊為兩個,一個users 一個 blogs

users 模塊兩張表:userprofile 用戶表和emailverifycode用戶注冊表

blogs 模塊4張表: artical 文章表、tags文章標簽表、catagroy文章分類表和comments文章評論表

 

 

有了上述思考和歸納,就可以新建我們的users 、blogs兩個app。

在項目根目錄下執行如下命令:

image.png

 

新建完成后,將兩個app 移動到apps 包中

 

image.png

 

 

一、創建app models

    vim apps\users\models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib.auth.models import AbstractUser
from django.db import models
 
# Create your models here.
class UserProfile(AbstractUser):
    '''
    用戶表
    :param  id 自動生成
    username 和 password 都繼承AbstractUser表
    blank = True  針對表單提交,提交時可以為空
    auto_now 不管是創建還是修改都會更新該字段
    auto_now_add 只有在創建時會更新字段,修改時保持不變
    '''
    USERNAME_FIELD = "username"
    GENDER_CHOISE = (('M', u'男'), ('F', '女'))
    gender = models.CharField(verbose_name='性別', choices=GENDER_CHOISE, max_length=1, default='M')
    mobile = models.CharField(verbose_name='手機號碼', max_length=11, null=True, blank=True)
    photo = models.ImageField(verbose_name='頭像', upload_to='images', max_length=100, default='images/default.jpg')
    updatetime = models.DateTimeField(verbose_name='更新時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='創建時間', auto_now_add=True)
     
    class Meta:
        app_label = 'users'
        verbose_name = u'用戶'
        verbose_name_plural = verbose_name
        db_table = 'user_profile'
        ordering = ['-updatetime']
         
    def __unicode__(self):
        return self.username
         
class EmailVerifyRecode(models.Model):
    TYPE_CHOICES = (
        ('register', u'注冊'),
        ('forget', u'找回密碼')
    )
    code = models.CharField(verbose_name='驗證碼', max_length=20)
    email = models.EmailField(verbose_name='郵箱', max_length=50)
    sendtype = models.CharField(verbose_name='驗證碼類型', max_length=20, choices=TYPE_CHOICES)
    updatetime = models.DateTimeField(verbose_name='更新時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='創建時間', auto_now_add=True)
     
    class Meta:
        app_label = 'users'
        verbose_name = '郵箱驗證碼'
        verbose_name_plural = verbose_name
        db_table = 'email_verify_recode'
    def __unicode__(self):
        return self.code

   vim apps\blogs\models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from DjangoUeditor.models import UEditorField
# Create your models here.
class Catagroy(models.Model):
    '''
    文章分類
    '''
    name = models.CharField(verbose_name='分類名', max_length=30)
    parent = models.CharField(verbose_name='歸屬於', max_length=30, null=True, blank=True)
    updatetime = models.DateTimeField(verbose_name='修改時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='創建時間', auto_now_add=True)
     
    class Meta:
        verbose_name = u'文章分類'
        verbose_name_plural = verbose_name
        db_table = 'catagory'
        ordering = ['createtime']
         
    def __unicode__(self):
        return '{} | {}'.format(self.name, self.parent)
         
class Tags(models.Model):
    '''
    文章標簽
    '''
    name = models.CharField(verbose_name='標簽名', max_length=30)
    updatetime = models.DateTimeField(verbose_name='修改時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='創建時間', auto_now_add=True)
     
    class Meta:
        verbose_name = u'文章標簽'
        verbose_name_plural = verbose_name
        db_table = 'tags'
        ordering = ['-updatetime']
    def __unicode__(self):
        return self.name
         
class Artical(models.Model):
    '''
    文章表
    :param
    '''
    title = models.CharField(verbose_name='標題', max_length=50)
    author = models.CharField(verbose_name='作者', max_length=50)
    content = UEditorField(verbose_name=u'文章正文', width=850, height=500, toolbars="full", imagePath="images/",
                        filePath="files/",
                        upload_settings={"imageMaxSize": 51200000, "videoPath": "video/"},
                        settings={}, command=None, blank=True)
    click_num = models.IntegerField(verbose_name='點擊率', default=0)
    catagroy = models.ForeignKey(Catagroy)
    tags = models.ManyToManyField(Tags)
    updatetime = models.DateTimeField(verbose_name='修改時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='創建時間', auto_now_add=True)
     
    class Meta:
        verbose_name = u'文章'
        verbose_name_plural = verbose_name
        db_table = 'artical'
        ordering = ['createtime']
    def __unicode__(self):
        return '{} | {}'.format(self.title, self.catagroy)
         
class Comments(models.Model):
    '''
    評論
    '''
    username = models.CharField(verbose_name='昵稱', max_length=16, null=True, blank=True)
    email = models.EmailField(verbose_name='郵箱')
    content = models.CharField(verbose_name='評論內容', max_length=500)
    artical = models.ForeignKey(Artical, verbose_name='博客文章')
    updatetime = models.DateTimeField(verbose_name='修改時間', auto_now=True)
    createtime = models.DateTimeField(verbose_name='發布時間', auto_now_add=True)
     
    class Meta:
        verbose_name = u'文章評論'
        verbose_name_plural = verbose_name
        db_table = 'comments'
        ordering = ['-updatetime']
    def __unicode__(self):
        return self.username

 

二、配置路由(未區分項目模塊,urls 分離到各個app,需要在app中新建urls.py文件)

 

    2.1 配置項目主路由

    vim cpyblog\cpyblog\urls.py

from django.conf.urls import url, include
from django.contrib import admin
import xadmin
from django.conf.urls.static import static
from django.conf import settings
from users import urls as userurls
from blogs import urls as blogurls
from blogs.views import IndexView
urlpatterns = [
              url(r'^$', IndexView.as_view(), name='index'),
              url(r'^admin/', admin.site.urls),
              url(r'^xadmin/', xadmin.site.urls),
              url(r'^ueditor/', include('DjangoUeditor.urls')),
              url(r'^users/', include(userurls)),
              url(r'^blogs/', include(blogurls)),
              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL,
                                                                                         document_root=settings.STATIC_ROOT)

  

  

    

    2.2 配置users app 路由

    vim cpyblog\apps\users\urls.py

    

#!/usr/bin/env python  
# -*- coding:utf-8 -*-
__author__ = 'cpy'
from django.conf.urls import url
urlpatterns = [
]

  


    2.3 配置cpyblog\apps\blogs\urls.py    

 

#!/usr/bin/env python

# -*- coding: utf-8 -*-
 from  django.conf.urls  import  url
 urlpatterns  =  [
 ]

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM