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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容