用 Django 做了一个照片分享网站
最近翻了一下过去做过的东西,找到了这个绿光照片分享,于是就拿来分享了。项目地址在:
https://github.com/restran/green-glow
这是我2012年的一个课程作业,实现的功能是照片分享。正好以这个作业学习了 Django 和 Web 开发。当时特别喜欢豆瓣、又拍和 Flickr,所以几乎是模仿这几个网站的方式,完成了整个网站。
当时还有许多未完成的功能:
- 注册邮件验证,找回密码;
- 验证码;
- ...
环境及依赖
这个网站使用 python 2.7 开发,其他版本没有测试过。django 使用最新版的话会出错,所以需要指定版本。推荐使用 virtualenv 来搭建环境。
django==1.2.7
pillow
qiniu==6.1.4
配置
如果部署网站,需要做如下配置
# 图片存储在七牛上,需要配置七牛的帐号
qiniu.conf.ACCESS_KEY = "123"
qiniu.conf.SECRET_KEY = "456"
# 存在七牛上的图片的文件名前缀
QINIU_FILE_PREFIX = 'grnglow'
# 七牛图片存储的 URL
QINIU_IMG_URL = 'http://your-domain.qiniudn.com/'
# 主页的URL
HOME_PAGE_URL = 'http://127.0.0.1:8000/'
数据库默认使用 SQLite,可以修改成 MySQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(PROJECT_PATH, 'db.sqlite3'),
}
}
在运行网站前,需要先建表,可以执行
python manage.py syncdb
热门图片排序
其中计算照片的精彩程度是通过喜欢来进行投票的。为了不使一张照片长期占据排名的前面部分,在计算照片的得分时考虑了现在的时间与照片上传时间的差值,使得后上传的照片可以有机会排到前面。
当时看了几篇基于用户投票的排序算法:
- 基于用户投票的排名算法(一):Delicious和Hacker News
- 基于用户投票的排名算法(二):Reddit
- 基于用户投票的排名算法(三):Stack Overflow
- 基于用户投票的排名算法(四):牛顿冷却定律
- 基于用户投票的排名算法(五):威尔逊区间
- 基于用户投票的排名算法(六):贝叶斯平均
为了简单起见,不用后台一个程序计算排名。参照这些算法简化了一下,计算公式如下:

其中k1和k2是系数,T是当前时间据某个系统设置的初始时间的差。由于得分采用的是发生喜欢操作时,计算一次得分。因此,为每个得分都加上一个随时间增长的分数增量,使得后上传的照片获得更高的分数。g是照片得分的下降指数,大于1,可以使得新上传的照片下降的速度慢一点,老照片会下降的快一点。由于arctan(0)等于0,因此加上系数0.5,避免除以0。由于用户上传照片时喜欢数为0,因此加上1,表示用户为自己的照片投票。
def calculateScore(self):
begin_time = datetime.datetime(2012, 1, 1, 0, 0, 0)
time_offset1 = datetime.datetime.now() - begin_time
time_offset2 = datetime.datetime.now() - self.date_posted
minutes1 = (time_offset1.days * 24 * 60) + time_offset1.seconds / 60
minutes2 = (time_offset2.days * 24 * 60) + time_offset2.seconds / 60
self.score = minutes1 / 120.0 + (self.like_count + 1) / (math.atan(minutes2 / 240.0 + 0.5) ** 2.2)
网站效果图
首页

个人主页

探索页面

照片详细页面

用 Django 做了一个照片分享网站的更多相关文章
- 用django框架开发一个B2C购物网站用户注册知识点总结2
一:用户部分: 用户注册: 用户注册序列化器: import re from django_redis import get_redis_connection from rest_framework ...
- 用django框架开发一个B2C购物网站的基本流程和用到的知识点总结1
开发流程 开发模式采用前后端分离模式,作为后端开发人员我们只关注后端业务逻辑开发: 省略项目框架搭建文件的配置部分.... 一:用户部分 在项目开发中我们要用到用户模型类User,Django认证系统 ...
- 这几天有django和python做了一个多用户博客系统(可选择模板)
这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
- Django跳转到不同的页面的方法和实例–使用Django建立你的第一个网站
1 前记 这次记录的这些东西,主要是自己在搭建个人网站的时候遇到的一些问题记录,不算严格意义上的教程和使用说明.按照目前自己的web水平,去写这方面的教程无疑是误人子弟.因为自己虽然做程序员很多年,但 ...
- 最近用django做了个在线数据分析小网站
用最近做的理赔申请人测试数据集做了个在线分析小网站. 数据结构,算法等设置都保存在json文件里.将来对这个小破站扩充算法,只修改一下json文件就行. 当然,结果分析还是要加代码的.页面代码不贴了, ...
- vuejs模仿实现一个电影分享类网站
前几天朋友发了一个电影分享类网站:http://dy.bingthink.top/ 感觉界面还挺好看的,所以打算用vuejs模仿写一个. 从后台转前端,要学习的东西挺多的,仅以此记录我的学习历程,闲的 ...
- django 搭建一个投票类网站(二)
前一篇讲了创建一个工程和一个polls的应用程序,以及配置了数据库. 这篇就继续讲吧 1.django admin模块 admin模块是django自带的模块,他让开发者可以不用管写任何代码的情况下就 ...
- django 搭建一个投票类网站(一)
写在最前,之前零零散散的看过django,但是由于比较杂,学的云里雾里的,所以就停了一段落,但是我最近找到了一个django的书,是李建编著的django入门与实践,于是,打算照着书上的步骤来写好一个 ...
- 用Django做一个省份选择器
做一个省份选择器 使用django做后端, mysql数据库, jQuery 列出结构主要的文件, 其它配置比较简单 models.py 因为所有数据的结构基本一致, 把所有省份, 市和区全部存储一张 ...
随机推荐
- WPF开源界面库及控件
WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...
- test20180907 day1
T1 256MB,1Sec T2 512MB,3Sec T3 512MB,1Sec 总分:150 试题一 餐馆 题目背景 铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加. 题目描述 共有 ...
- 保存csv时, 不保留index
pd.to_csv('your.csv', index=False)
- && 和 || 运算
a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果 ...
- vim golang 插件
最好用的vim golang 插件 可自动缩进 git clone git@github.com:aimin/InstallvimGo.git
- MySQL Disk--SSD 特性
======================================================================= SSD 特性 .随机读能力非常好,连续读性能一般,但比普 ...
- GridView实现数据编辑和删除
<asp:GridView ID="gv_Emplogin" runat="server" AutoGenerateColumns="False ...
- POJ_2299 Ultra-QuickSort【归并排序】
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013912596/article/details/35655703 题目链接:http://poj ...
- cmd下查看当前登陆用户
cmd下查看当前登陆用户 终端下,自然可以用quser这个命令了.但是在其它如专业版2k下如何查看在线用户呢? C:\Documents and Settings\Administrator>n ...
- MQ中间件选型
如果Java项目,数据量不大,用ActiveMQ,相对简单.支持JMS. 如果对性能.可靠性有一定要求,用RabbitMQ. 如果对性能有很高要求,甚至可牺牲一些可靠性,选kakfa. 在当前大数据时 ...