項目源碼下載:http://download.vhosts.cn
思考:
博客主要用於文章、圖片、視頻等資訊內容發布, 既然是發布類站點,首先得有發布的內容,然后需要有人對其進行管理,還需要可以評論,如果后期有會員機制還需要有登錄和用戶中心等。所以基本可以分為兩大類,一類為發布內容,一類為用戶管理。
有了數據表結構邏輯之后,可以區分apps 模塊為兩個,一個users 一個 blogs
users 模塊兩張表:userprofile 用戶表和emailverifycode用戶注冊表
blogs 模塊4張表: artical 文章表、tags文章標簽表、catagroy文章分類表和comments文章評論表
有了上述思考和歸納,就可以新建我們的users 、blogs兩個app。
在項目根目錄下執行如下命令:
新建完成后,將兩個app 移動到apps 包中
一、創建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
=
[
]