跟著老師用Navicat Data Modeler畫了一下大概的數(shù)據(jù)模型
主要有User月幌,Tag橙凳,Category,ArticleManager普办,Article,Comment徘钥,Links衔蹲,Ad這幾張表。
Paste_Image.png
Navicat Data Modeler這個(gè)軟件給我的最大感覺(jué)是小巧呈础,使用方便舆驶,但是功能缺失有局限,只適合用于小的項(xiàng)目(個(gè)人感覺(jué)^ ^而钞,不喜勿噴)沙廉。
根據(jù)pdm在blog/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.
# 用戶模型.
# 第一種:采用的繼承方式擴(kuò)展用戶信息(本系統(tǒng)采用)
# 擴(kuò)展:關(guān)聯(lián)的方式去擴(kuò)展用戶信息
class User(AbstractUser):
avatar = models.ImageField(upload_to='avatar/%Y/%m', default='avatar/default.png', max_length=200, blank=True, null=True, verbose_name='用戶頭像')
qq = models.CharField(max_length=20, blank=True, null=True, verbose_name='QQ號(hào)碼')
mobile = models.CharField(max_length=11, blank=True, null=True, unique=True, verbose_name='手機(jī)號(hào)碼')
url = models.URLField(max_length=100, blank=True, null=True, verbose_name='個(gè)人網(wǎng)頁(yè)地址')
class Meta:
verbose_name = '用戶'
verbose_name_plural = verbose_name
ordering = ['-id']
def __unicode__(self):
return self.username
# tag(標(biāo)簽)
class Tag(models.Model):
name = models.CharField(max_length=30, verbose_name='標(biāo)簽名稱')
class Meta:
verbose_name = '標(biāo)簽'
verbose_name_plural = verbose_name
def __unicode__(self):
return self.name
# 分類
class Category(models.Model):
name = models.CharField(max_length=30, verbose_name='分類名稱')
index = models.IntegerField(default=999,verbose_name='分類的排序')
class Meta:
verbose_name = '分類'
verbose_name_plural = verbose_name
ordering = ['index', 'id']
def __unicode__(self):
return self.name
# 自定義一個(gè)文章Model的管理器
# 1、新加一個(gè)數(shù)據(jù)處理的方法
# 2臼节、改變?cè)械膓ueryset
class ArticleManager(models.Manager):
def distinct_date(self):
distinct_date_list = []
date_list = self.values('date_publish')
for date in date_list:
date = date['date_publish'].strftime('%Y/%m文章存檔')
if date not in distinct_date_list:
distinct_date_list.append(date)
return distinct_date_list
# 文章模型
class Article(models.Model):
title = models.CharField(max_length=50, verbose_name='文章標(biāo)題')
desc = models.CharField(max_length=50, verbose_name='文章描述')
content = models.TextField(verbose_name='文章內(nèi)容')
click_count = models.IntegerField(default=0, verbose_name='點(diǎn)擊次數(shù)')
is_recommend = models.BooleanField(default=False, verbose_name='是否推薦')
date_publish = models.DateTimeField(auto_now_add=True, verbose_name='發(fā)布時(shí)間')
user = models.ForeignKey(User, verbose_name='用戶')
category = models.ForeignKey(Category, blank=True, null=True, verbose_name='分類')
tag = models.ManyToManyField(Tag, verbose_name='標(biāo)簽')
objects = ArticleManager()
class Meta:
verbose_name = '文章'
verbose_name_plural = verbose_name
ordering = ['-date_publish']
def __unicode__(self):
return self.title
# 評(píng)論模型
class Comment(models.Model):
content = models.TextField(verbose_name='評(píng)論內(nèi)容')
username = models.CharField(max_length=30, blank=True, null=True, verbose_name='用戶名')
email = models.EmailField(max_length=50, blank=True, null=True, verbose_name='郵箱地址')
url = models.URLField(max_length=100, blank=True, null=True, verbose_name='個(gè)人網(wǎng)頁(yè)地址')
date_publish = models.DateTimeField(auto_now_add=True, verbose_name='發(fā)布時(shí)間')
user = models.ForeignKey(User, blank=True, null=True, verbose_name='用戶')
article = models.ForeignKey(Article, blank=True, null=True, verbose_name='文章')
pid = models.ForeignKey('self', blank=True, null=True, verbose_name='父級(jí)評(píng)論')
class Meta:
verbose_name = '評(píng)論'
verbose_name_plural = verbose_name
def __unicode__(self):
return str(self.id)
# 友情鏈接
class Links(models.Model):
title = models.CharField(max_length=50, verbose_name='標(biāo)題')
description = models.CharField(max_length=200, verbose_name='友情鏈接描述')
callback_url = models.URLField(verbose_name='url地址')
date_publish = models.DateTimeField(auto_now_add=True, verbose_name='發(fā)布時(shí)間')
index = models.IntegerField(default=999, verbose_name='排列順序(從小到大)')
class Meta:
verbose_name = '友情鏈接'
verbose_name_plural = verbose_name
ordering = ['index', 'id']
def __unicode__(self):
return self.title
# 廣告
class Ad(models.Model):
title = models.CharField(max_length=50, verbose_name='廣告標(biāo)題')
description = models.CharField(max_length=200, verbose_name='廣告描述')
image_url = models.ImageField(upload_to='ad/%Y/%m', verbose_name='圖片路徑')
callback_url = models.URLField(null=True, blank=True, verbose_name='回調(diào)url')
date_publish = models.DateTimeField(auto_now_add=True, verbose_name='發(fā)布時(shí)間')
index = models.IntegerField(default=999, verbose_name='排列順序(從小到大)')
class Meta:
verbose_name = u'廣告'
verbose_name_plural = verbose_name
ordering = ['index', 'id']
def __unicode__(self):
return self.title
下載安裝mysql撬陵,下載的mysql-community-server版俱病,為免安裝版。
設(shè)置參考百度經(jīng)驗(yàn)……
root用戶的默認(rèn)密碼為空袱结,不需要輸入,更改密碼是用
>>>mysqladmin -u root password "root"
修改默認(rèn)的sqlite3數(shù)據(jù)庫(kù)為mysql數(shù)據(jù)庫(kù),修改settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog_db',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'root',
}
}
由于引用django.contrib.auth.models.AbstractUser
AUTH_USER_MODEL = 'blog.User'
pycharm中Tools>run manage.py Task 中運(yùn)行
makemigrations#生產(chǎn)sql
migrate #執(zhí)行sql,生成對(duì)應(yīng)的表
生成如下列表:
Paste_Image.png
createsuperuser添加超級(jí)賬戶
如遇數(shù)據(jù)庫(kù)模型變更途凫,則更新數(shù)據(jù)庫(kù)垢夹,使用以下語(yǔ)句:
makemigrations
syncdb