用 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 因为所有数据的结构基本一致, 把所有省份, 市和区全部存储一张 ...
随机推荐
- hdu2083 简易版之最短距离 排序水题
给出数轴n个坐标,求一个点到所有点距离总和最小.排序后最中间一个点或两个点之间就是最优 #include<stdio.h> #include<algorithm> using ...
- python open和file的区别
opne和file都是用来对文件的操作 open:内置函数,使用方式是open('file_name', mode, buffering),返回值是一个file对象,以写模式打开文件如果不存在会被创建 ...
- CodeIgniter 安装指导
CodeIgniter 安装分为四个步骤: 解压缩安装包. 把 CodeIgniter 文件夹和里面的文件上传到你的服务器.通常 index.php 在根目录. 用任何文本编辑器打开 applicat ...
- 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表: 问题: 直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了. ...
- 【转】每天一个linux命令(36):diff 命令
原文网址:http://www.cnblogs.com/peida/archive/2012/12/12/2814048.html diff 命令是 linux上非常重要的工具,用于比较文件的内容,特 ...
- JUC集合之 ConcurrentSkipListMap
ConcurrentSkipListMap介绍 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景. ConcurrentSkipListMap和TreeMap,它 ...
- django 获取前端获取render模板渲染后的html
function GetProxyServerByGroup(ths, action){ var _html = $.ajax({ url: "/nginx/get_proxy_server ...
- java 环境变量与安装目录
JDK安装完成后有如下文件夹 bin:存放JDK的各种工具命令,如javac.java等命令. jre:运行java程序所必须的JRE环境 lib:JDK工具命令的实际执行程序,如tools.jar中 ...
- c# ProgressBar进度条方向和美观
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style | ...
- msp430学习笔记-IO及低功耗
引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013511.HTM MSP430F149有6个8位的IO口,其中P1,P2口占两个中断向量,共可以接16个中断源.还 ...