hacker news php,在Python的Django框架中实现Hacker News的一些功能

这篇博客介绍了如何使用Django构建一个简单的投票应用。首先,定义了Link和Vote两个模型,分别代表链接和投票。然后,配置了admin管理界面,并创建了ListView视图来展示链接列表。接着,创建了模板文件夹和基础模板,实现了页面布局。最后,通过Django shell为链接添加了投票数,并讨论了应用的局限性和未来可能的改进方向。
摘要由CSDN通过智能技术生成

from django.db import models

from django.contrib.auth.models import User

class Link(models.Model):

title = models.CharField("Headline", max_length=100)

submitter = models.ForeignKey(User)

submitted_on = models.DateTimeField(auto_now_add=True)

rank_score = models.FloatField(default=0.0)

url = models.URLField("URL", max_length=250, blank=True)

description = models.TextField(blank=True)

def __unicode__(self):

return self.title

class Vote(models.Model):

voter = models.ForeignKey(User)

link = models.ForeignKey(Link)

def __unicode__(self):

return "%s upvoted %s" % (self.voter.username, self.link.title)

建立相应的管理类。输入下面内容到 links/admin.py 中:

from django.contrib import admin

from .models import Link, Vote

class LinkAdmin(admin.ModelAdmin): pass

admin.site.register(Link, LinkAdmin)

class VoteAdmin(admin.ModelAdmin): pass

admin.site.register(Vote, VoteAdmin)

输入下面内容到links/views.py:

from django.views.generic import ListView

from .models import Link, Vote

class LinkListView(ListView):

model = Link

Insert following lines intosteelrumor/urls.py:

from links.views import LinkListView

...

urlpatterns = patterns('',

url(r'^$', LinkListView.as_view(), name='home'),

建立一个新的模板文件夹,在steelrumors/templates/links/link_list.html中输入下面内容:

{% for link in object_list %}

编辑settings.py,添加你的两个应用到INSTALLED_APPS = (的尾部:

'links',

'steelrumors',

)

同步建立链接对象,并在管理界面里输入一些数据:

./manage.py syncdb

添加品牌

建立一个通用基本模板steelrumors/templates/base.html:

Steel Rumors

{% block content %}

{% endblock %}

修改steelrumors/templates/links/link_list.html,用这种方式把原先代码包裹起来:

{% extends "base.html" %}

{% block content %}

...

{% endblock %}

投票数模型管理器

我们需要在我们的通用ListView中添加一个计票数。添加这些到 links/models.py:

from django.db.models import Count

class LinkVoteCountManager(models.Manager):

def get_query_set(self):

return super(LinkVoteCountManager, self).get_query_set().annotate(

votes=Count('vote')).order_by('-votes')

Insert these two lines into the Link class inlinks/models.py:

class Link(models.Model):

...

with_votes = LinkVoteCountManager()

objects = models.Manager() #default manager

编辑 links/views.py,添加这两行到LinkListView类中:

class LinkListView(ListView):

...

queryset = Link.with_votes.all()

paginate_by = 3

狂欢(作弊)

您可以在django shell中用下面的行给随机的标题添加100个选票数:

$ ./manage.py shell

>>> from links.models import Link

>>> for i in xrange(100): Vote(link=Link.objects.order_by('?')[0],voter=a).save()

最终评论

或许你想知道这个网站的这个版本是否有用,我想说,它作为私人测试版是工作不错的。任何新用户都必须通过管理界面手动添加。如果想让他们登陆管理界面,他们必须是员工。员工可以通过手动创建投票对象来进行投票。

站点面向大众的部分仍能显示来自员工投票率最高的传闻。基于如何设计好的模板的问题,这个版本也可以用来获取对网站的设计和品牌的反馈。

总结完第一部分。想得到随后部分的更新,请在Twitter上粉我一个@arocks。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

47d507a036d4dd65488c445c0974b649.png

立即提交

专题推荐064df72cb40df78e80e61b7041ee044f.png独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

7dafe36c040e31d783922649aefe0be1.png玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

04246fdfe8958426b043c89ded0857f1.png天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

php中文网:公益在线php培训,帮助PHP学习者快速成长!

Copyright 2014-2020 https://www.php.cn/ All Rights Reserved | 苏ICP备2020058653号-1e6cebb680dfe320dad7e62bd6442c3a6.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值