用 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 因为所有数据的结构基本一致, 把所有省份, 市和区全部存储一张 ...
随机推荐
- 《DSP using MATLAB》Problem 3.7
一个复数序列可以分解为共轭偶对称和共轭奇对称部分. 代码: %% ------------------------------------------------------------------- ...
- BKL 大内核锁
BKL 大内核锁 BKL是一种递归锁.一个进程可以多次请求一个锁,并不会像自旋锁那么产生死锁. BKL可以在进程上下文中. BKL是有害的. 在内核中不鼓励使用BKL.一个执行线程可以递归的请求锁lo ...
- POJ1742Coins
题目:http://poj.org/problem?id=1742 可以正常地多重背包.但是看了<算法竞赛入门经典>,收获了贪心的好方法. 因为这里只需知道是否可行,不需更新出最优值之类的 ...
- bzoj1853幸运数字
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 容斥原理的应用. 发现十位的话只有2047个只含6或8的数,故可以存.它们的倍数个数只要 ...
- java日期格式转换工具类
原文地址:http://blog.csdn.net/zhiweianran/article/details/7991531 package com.ace.backoffice.utils; impo ...
- android 更新listview 其中一行的数据显示
private void updateView(int index){ View v = yourListView.getChildAt(index - yourListView.getFirstVi ...
- 云-AWS-清单:清单列表
ylbtech-云-AWS-清单:清单列表 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://yl ...
- crontab 执行脚本,报错/home/scripts/eyeMonitor.sh: line 8: node: command not found
报错现象:在shell下执行node没有任何问题,但crontab自动运行就会报错. 原因:node的安装路径:/root/.nvm/versions/node/v6.7.0/bin/node Sh ...
- Linux版本使用的文件系统类型
1. cat /etc/fstab 2. df -T -h
- centos svn 的搭建
一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库(repository) 中. ...