6月第一周學習內容

本周對django的知識點的學習進行了實際運用:開發一個完整的博客。

博客的功能有:

1 郵箱驗證功能、

2 輪播圖功能、

3 博客分類功能、

4 標簽云功能、

5 幻燈片功能、

6 博客推薦功能、

7 最新發布功能、

8 最新評論功能、

9 博客搜索功能、

10 友情鏈接功能、

11 博客列表功能、

12 博客分頁功能、

13 博客標簽功能、

14 分類查詢功能、

15 標簽查詢功能、

16博客詳情功能、

17 相關推薦功能、

18 發表評論功能、

19 評論列表功能、

20 用戶登錄功能、

21 用戶注冊功能、

22 注銷用戶功能、

23 后臺富文本功能。

具體步驟:

第一步:搭建開發環境

? ? 本項目需要用到的開發環境有:virtualenv、virtualenvwrapper、pymysql、mysql數據庫和django。

? ? 可以使用如下命令安裝:

????????mysql: ??sudo apt install mysql-server mysql-client

? ? ? ? pymysql:pip install pymysql

? ? ? ? django:pip install django==1.11

第二步:創建項目、應用和數據庫

? ? 創建項目:django-admin startproject 項目名

? ? 創建應用:pythonmanage.pystartapp 應用名

? ? 數據庫:create database 數據庫名 (想在數據庫中使用中文+charset=utf8)

第三步:搭建數據模型

切換到用戶應用中

#用戶功能

fromdjango.contrib.auth.modelsimportAbstractUser

classBlogUser(AbstractUser):

????nikename = models.CharField('昵稱', max_length=20, default='')

#郵箱驗證功能

classEmailVerifyRecord(models.Model):

????code = models.CharField(verbose_name='驗證碼', max_length=50,default='')

????email = models.EmailField(max_length=50, verbose_name="郵箱")

????send_type = models.CharField(verbose_name="驗證碼類型", choices=(("register",u"注冊"),("forget","找回密碼"), ("update_email","修改郵箱")), max_length=30)

????send_time = models.DateTimeField(verbose_name="發送時間", default=datetime.now)

classMeta:

????verbose_name ="郵箱驗證碼"

????verbose_name_plural = verbose_name

def__str__(self):

? ? ?return'{0}({1})'.format(self.code, self.email)

切換到博客應用中

#輪播圖功能模型

classBanner(models.Model):

????title = models.CharField('標題', max_length=50)

????cover = models.ImageField('輪播圖', upload_to='static/images/banner')

????link_url = models.URLField('圖片鏈接', max_length=100)

????idx = models.IntegerField('索引')

????is_active = models.BooleanField('是否是active', default=False)

def__str__(self):returnself.title

classMeta:

????verbose_name ='輪播圖'

????verbose_name_plural ='輪播圖'

#博客分類功能模型

classBlogCategory(models.Model):

????name = models.CharField('分類名稱', max_length=20, default='')

????classMeta:

????????verbose_name ='博客分類'

????verbose_name_plural ='博客分類'

????def__str__(self):

????????returnself.name

#標簽功能模型

classTags(models.Model):

????name = models.CharField('標簽名稱', max_length=20, default='')

????classMeta:

????????verbose_name ='標簽'

????????verbose_name_plural ='標簽'

????def__str__(self):

????????returnself.name

#發布博客功能模型

classPost(models.Model):

????user = models.ForeignKey(BlogUser, verbose_name='作者')

????category = models.ForeignKey(BlogCategory, verbose_name='博客分類', default=None)

????tags = models.ManyToManyField(Tags, verbose_name='標簽')

????title = models.CharField('標題', max_length=50)

????content = models.TextField('內容')

????pub_date = models.DateTimeField('發布日期', default=datetime.now)

????cover = models.ImageField('博客封面', upload_to='static/images/post', default=None)

????views = models.IntegerField('瀏覽數', default=0)

????recommend = models.BooleanField('推薦博客', default=False)

????def__str__(self):

????????returnself.title

????classMeta:

????????verbose_name ='博客'

????????verbose_name_plural ='博客'

#評論功能模型

classComment(models.Model):

????post = models.ForeignKey(Post, verbose_name='博客')

????user = models.ForeignKey(BlogUser, verbose_name='作者')

????pub_date = models.DateTimeField('發布時間')

????content = models.TextField('內容')

????def__str__(self):returnself.content

????classMeta:

????????verbose_name ='評論'

????????verbose_name_plural ='評論'

#友情鏈接功能模型

classFriendlyLink(models.Model):

????title = models.CharField('標題', max_length=50)

????link = models.URLField('鏈接', max_length=50, default='')

????def__str__(self):

????????returnself.title

????classMeta:

????????verbose_name ='友情鏈接'

????????verbose_name_plural ='友情鏈接'

第四步:各個功能的實現

實現幻燈片功能

一、模型

fromblogs.modelsimportBanner

admin.site.register(Banner)

二、視圖函數

from.modelsimportBanner

defindex(request):

????banner_list = Banner.objects.all()

????ctx = {

????????'banner_list': banner_list,

????}

????returnrender(request,'index.html', ctx)

三、模板


<

ol class="carousel-indicators">

{%

for banner in banner_list%}

{%

if banner.is_active%}

<

lidata-target="#focusslide"data-slide-to="{{banner.idx}}"class="active">

{%

else%}

<

lidata-target="#focusslide"data-slide-to="{{banner.idx}}">

{%

endif%}

{%

endfor%}

</

ol>

<

divclass="carousel-inner"role="listbox">

{%

forbannerinbanner_list%}

{%

ifbanner.is_active%}

<

divclass="itemactive">

<

ahref="{{banner.link_url}}"target="_blank"title="{{banner.title}}" >

<

imgsrc="{{banner.cover}}"alt="{{banner.title}}"class="img-responsive">

</

div>

{%

else%}

<

divclass="item">

<

ahref="{{banner.link_url}}"target="_blank"title="{{banner.title}}" >

<

imgsrc="{{banner.cover}}"alt="{{banner.title}}"class="img-responsive">

</

div>

{%

endif%}

{%

endfor%}

</

div>

<

aclass="leftcarousel-control"href="#focusslide"role="button"data-slide="prev"rel="nofollow">

<

spanclass="glyphiconglyphicon-chevron-left"aria-hidden="true">

<

spanclass="sr-only">上一個

<

aclass="rightcarousel-control"href="#focusslide"role="button"data-slide="next"rel="nofollow">

<

spanclass="glyphiconglyphicon-chevron-right"aria-hidden="true">

<

spanclass="sr-only">下一個

</

div>

博客推薦功能

一、模型:

fromblogs.modelsimportBanner,Post,BlogCategory,Tags

...

admin.site.register(BlogCategory)

admin.site.register(Tags)

admin.site.register(Post)

二、視圖:

defindex(request):

????banner_list = Banner.objects.all()

????recommend_list = Post.objects.filter(recommend=1)

????ctx = {

????????'banner_list': banner_list,

????????'recommend_list': recommend_list,

????}

????returnrender(request,'index.html', ctx)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容