項目源碼下載:http://download.vhosts.cnpython
思考:django
博客主要用於文章、圖片、視頻等資訊內容發佈, 既然是發佈類站點,首先得有發佈的內容,而後須要有人對其進行管理,還須要能夠評論,若是後期有會員機制還須要有登陸和用戶中心等。因此基本能夠分爲兩大類,一類爲發佈內容,一類爲用戶管理。vim
有了數據表結構邏輯以後,能夠區分apps 模塊爲兩個,一個users 一個 blogsapp
users 模塊兩張表:userprofile 用戶表和emailverifycode用戶註冊表ide
blogs 模塊4張表: artical 文章表、tags文章標籤表、catagroy文章分類表和comments文章評論表url
有了上述思考和概括,就能夠新建咱們的users 、blogs兩個app。3d
在項目根目錄下執行以下命令:code
新建完成後,將兩個app 移動到apps 包中orm
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
=
[
]