我的博客開發之 項目表結構設計

  

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

 

思考:django

博客主要用於文章、圖片、視頻等資訊內容發佈, 既然是發佈類站點,首先得有發佈的內容,而後須要有人對其進行管理,還須要能夠評論,若是後期有會員機制還須要有登陸和用戶中心等。因此基本能夠分爲兩大類,一類爲發佈內容,一類爲用戶管理。vim

    image.png 

有了數據表結構邏輯以後,能夠區分apps 模塊爲兩個,一個users 一個 blogsapp

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

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

 

 

有了上述思考和概括,就能夠新建咱們的users 、blogs兩個app。3d

在項目根目錄下執行以下命令:code

image.png

 

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

 

image.png

 

 

1、建立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

 

2、配置路由(未區分項目模塊,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  =  [
 ]
相關文章
相關標籤/搜索