這一段時(shí)間主要在學(xué)習(xí)Django開(kāi)發(fā)彩届, 同時(shí)鞏固一下自己的python語(yǔ)言产舞。
Django是一個(gè)功能強(qiáng)大的python web框架,基于此我開(kāi)發(fā)了一個(gè)SkyNet博客系統(tǒng)童社,其中html也使用了semantic ui前端框架告匠,有興趣的可以去學(xué)習(xí)一下戈抄。
至于django的基礎(chǔ)內(nèi)容我就不贅述了,不熟悉的同學(xué)可以去查看我的另外一篇Django初識(shí)也有很多比我寫的好的博客后专。
models
首先第一篇我打算寫一下模型划鸽,在Django中叫做models,一個(gè)模型就是一個(gè)單一的數(shù)據(jù)來(lái)源行贪,可以簡(jiǎn)單的理解就是在數(shù)據(jù)庫(kù)的一個(gè)表漾稀,并且models有如下的基本概念:
- 每一個(gè)models都是jango.db.models.Model的子類
- models的每一個(gè)屬性代表這數(shù)據(jù)庫(kù)的一個(gè)字段
- Django給你自動(dòng)生成數(shù)據(jù)庫(kù)訪問(wèn)API
我定義了三個(gè)模型
首先是Blog模型,具體定義如下:
class Blog(models.Model):
POST_STATUS = (
('P', '已發(fā)布'),
('D', '已刪除'),
('E', '正在編輯'),
)
title = models.CharField('標(biāo)題',max_length=150)
body = models.TextField('正文')
create_time = models.DateTimeField('創(chuàng)建時(shí)間',auto_now_add=True)
modify_time = models.DateTimeField('最后一次修改',auto_now=True)
status = models.CharField('文章?tīng)顟B(tài)',max_length=1, choices=POST_STATUS)
views = models.PositiveIntegerField('瀏覽量', default=0)
likes = models.PositiveIntegerField('喜歡', default=0)
praises = models.PositiveIntegerField('點(diǎn)贊', default=0)
category = models.ManyToManyField('Category',blank=True)
user = models.ForeignKey('User',verbose_name='作者')
def __str__(self):
return self.title
class Meta:
ordering = ('-create_time',)
下面我來(lái)一一講解
- 定義了title和body兩個(gè)字段建瘫,區(qū)別是定義了兩個(gè)不同的Field崭捍,charField適用于短的文本,而TextField適用于存儲(chǔ)長(zhǎng)文本啰脚,這是一個(gè)小的區(qū)別殷蛇。
- 定義里create_time和modify_time為DateTimeField,該Field包含Date和Time橄浓,相對(duì)應(yīng)的還有DateField和TimeField粒梦,設(shè)置的屬性auto_now_add當(dāng)初次創(chuàng)建的時(shí)候設(shè)置該字段,而auto_now是每一次models被保存的時(shí)候都會(huì)更改這個(gè)值荸实。
- status設(shè)置了一個(gè)屬性匀们,choices可以進(jìn)行選擇指定的值
- category設(shè)置的是ManyToManyField,也就是多對(duì)多准给,而user就設(shè)置了外鍵泄朴。
接下來(lái)就需要?jiǎng)?chuàng)建Category和User了:
#models.py
class Category(models.Model):
names = models.CharField('類型名稱',max_length=20)
desc = models.TextField('分類描述',blank=True, null=True)
def __str__(self):
return self.names
class User(AbstractUser):
pass
這里User是繼承了AbstractUser使用Django自帶的用戶,比較方便露氮。
最后定義了BlogComment用來(lái)記錄用戶評(píng)論
#models.py
class BlogComment(models.Model):
user = models.ForeignKey('User', verbose_name='用戶')
post = models.ForeignKey('BlogPost', verbose_name='文章')
comment = models.TextField('評(píng)論內(nèi)容',blank=True, null=True)
comment_time = models.DateTimeField('評(píng)論時(shí)間',auto_now_add=True)
class Meta:
ordering = ('-comment_time',)
基本上SkyNet博客的模型創(chuàng)建到這里就可以了祖灰,最后來(lái)配置一下admin,在admin展示我們的模型畔规。
#admin.py
class BlogUserAdmin(UserAdmin):
pass
class BlogAdmin(admin.ModelAdmin):
list_display = ('title', 'create_time')
admin.site.register(models.Post, BlogAdmin)
admin.site.register(models.Category)
admin.site.register(models.BlogComment)
admin.site.register(models.User,BlogUserAdmin)
這里要說(shuō)一下局扶,為了讓我們的User能在admin中顯示,還需要在settings.py中添加AUTH_USER_MODEL = 'blog.User',是默認(rèn)的User為我們自定義的User三妈,當(dāng)然你也可以添加不同的字段來(lái)擴(kuò)充User畜埋。
模型創(chuàng)建就先介紹到這了吧!
下一篇:
基于Django開(kāi)發(fā)的SkyNet博客二——base Template