[关闭]
@xuemy268 2015-01-16T12:25:04.000000Z 字数 1172 阅读 4443

使用django创建一个小说网站,易读中文网

django 小说系统 python scrapy


初学django,用django写了一个小说网页,只有最基本的功能,我本身就是一个小说爱好者,从我看小说的经历来看,每个人都有自己爱看的小说类型,而且现在小说站的一些功能对于看小说的人来说,页没有什么太大的作用。只要小说能看就行,其他的点赞,分享等等这些都是可有可无的东西!由于本人爱看一些武侠,玄幻小说,所以做的这个小说站就是以武侠玄幻小说为主,还添加一些别的类型的热门小说。喜欢看玄幻武侠小说来看看
易读中文网 http://www.ydzww.com
自己制作网站,可以灵活的配置,不受源码的限制。
在model中使用了django model manage,这样做的好处是在view中没有了任何数据库的操作,而且能够集中的修改,由于使用的是自己做的爬虫,爬虫的工作原理是先将爬取得所有小说添加到数据库,然后才开始爬取章节,这么一来的话,数据库中就可能有一些小说没有章节,我们不想在网站中显示这些,所以使用下面的代码就可以把没有章节的小说去除掉!

class NovelManager(models.Manager):

    @property
    def real_novel(self):
        return self.select_related("category").exclude(lastchapterid=None)

里面的select_related 又是django里面的一个有用的功能!
小说模型如下

class Category(models.Manager):
    name = models.CharField()

class Novel(models.Manager):
    ...省略代码...
    category = models.ForeignKey(Category)

假如获取所有小说的话,再获取每个小说的category,

novels = Novel.objects.all()
for novel in novels:
    print novel.category

如果不使用select_related,有多少novel 就需要查询多少次 category 表,网站浏览人数多的话,这样做效果非常不好,如果使用了select_related

novels = Novel.objects.select_related('category').all()
for novel in novels:
    print novel.category

只需要查询一次category 就可以了,可以大大提高效率。
还有一个是prefect_related ,这个在多对多关系中使用,可以看一下官方文档,有介绍!
网站在使用了这两个函数后,首页的查询从31次缩减到了5次,非常有效果。
开发的时候建议使用

django-debug-toolbar

来源:易读中文网

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注