1、功能需求

  1. 一个人可以follow很多人
  2. 一个用户如果发了新weibo会自动推送所有关注他的人
  3. 可以搜索、关注其它用户
  4. 可以分类关注
  5. 用户可以发weibo, 转发、收藏、@其它人
  6. 发微博时可选择公开、隐私、只能好友看等
  7. 可私信聊天
  8. 热门微博无需关注
  9. 我的微博列表
  10. 可以评论、点赞微博
  11. 发微博时可以上传图片、视频、可以发表情

2.1 设计架构前需要考虑的问题

  1. weibo目前的架构经历了多次演变才做到目前支持大并发的成熟产品, 我们在设计架构时要考虑以下问题
  2. 亿级用户数据的存储如何高效实现?
  3. 用户发一条微博,后台要进行入库、分发、推送等多个动作才能完成,如何让用户感觉发微博速度快?
  4. 用户发weibo要推送给关注他的人,如何提高推送效率?
  5. 如何降低不同产品、模块、服务之前的耦合,使产品、功能的水平扩展等?
  6. “Break large complex systems down into many services… google.com search touches 100s of service(ads, web search, books, news, spelling correction…”
  7. 如何做到去中心化,避免单点及瓶颈
  8. 如何实现接口安全

2.2 架构实现

所需服务组件:

  • django: 用户页面呈现
  • nginx: 前端高并发必备
  • cdn:异地高并发、静态内容速度快必备
  • redis: 热点weibo\话题数据高效存储
  • rabbitMQ: 用户weibo推送
  • SOA:服务解耦,服务接口化
  • zabbix,nagios: 系统监控
  • google analysis: 用户访问质量、行为分析监控

用户发微博流程图

3.表结构设计

from django.db import models
from django.contrib.auth.models import User
# Create your models here. class Weibo(models.Model):
'''所有微博'''
wb_type_choices = (
(0,'new'),
(1,'forward'),
(2,'collect'),
)
wb_type = models.IntegerField(choices=wb_type_choices,default=0)
forward_or_collect_from = models.ForeignKey('self',related_name="forward_or_collects",blank=True,null=True)
user = models.ForeignKey('UserProfile')
text = models.CharField(max_length=140)
pictures_link_id = models.CharField(max_length=128,blank=True,null=True)
video_link_id = models.CharField(max_length=128,blank=True,null=True)
perm_choice = ((0,'public'),
(1,'private'),
(2,'friends'))
perm = models.IntegerField(choices=perm_choice,default=0)
date = models.DateTimeField(auto_now_add=True) def __str__(self):
return self.text class Topic(models.Model):
'''话题'''
name = models.CharField(max_length=140)
date = models.DateTimeField()
def __str__(self):
return self.name
class Category(models.Model):
'''微博分类''' name = models.CharField(max_length=32)
def __str__(self):
return self.name class Comment(models.Model):
'''评论'''
to_weibo = models.ForeignKey(Weibo)
p_comment = models.ForeignKey('self',related_name="child_comments")
user = models.ForeignKey('UserProfile')
comment_type_choices = ((0,'comment'),(1,'thumb_up'))
comment_type = models.IntegerField(choices=comment_type_choices,default=0)
comment = models.CharField(max_length=140)
date = models.DateTimeField(auto_created=True) def __str__(self):
return self.comment class Tags(models.Model):
'''标签'''
name = models.CharField(max_length=64)
def __str__(self):
return self.name class UserProfile(models.Model):
'''用户信息''' user = models.OneToOneField(User)
name = models.CharField(max_length=64)
brief = models.CharField(max_length=140,blank=True,null=True)
sex_type = ((1,'Male'),(0,'Female'))
sex = models.IntegerField(choices=sex_type,default=1)
age = models.PositiveSmallIntegerField(blank=True,null=True)
email = models.EmailField()
tags = models.ManyToManyField(Tags)
head_img = models.ImageField() follow_list = models.ManyToManyField('self',blank=True,related_name="my_followers",symmetrical=False) #registration_date = models.DateTimeField(auto_created=True)
def __str__(self):
return self.name

4.上传图片本地预览功能

如下图,发微博时,可以同时发图片,图片我们肯定是通过ajax异步上传到后台,但是我只是从电脑里选择了图片后,我还想实现一个在本地小图预览的功能, 这个需求如何实现呢?

本地预览实现

function handleFileSelect(evt) {
var files = evt.target.files; // Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) { // Only process image files.
if (!f.type.match('image.*')) {
continue;
} var reader = new FileReader(); // Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
var span = document.createElement('span');
span.innerHTML =
[
'<img style="height: 75px; border: 1px solid #000; margin: 5px" src="',
e.target.result,
'" title="', escape(theFile.name),
'"/>'
].join(''); document.getElementById('list').insertBefore(span, null);
};
})(f); // Read in the image file as a data URL.
reader.readAsDataURL(f);
}
} document.getElementById('files').addEventListener('change', handleFileSelect, false);
<input type="file" id="files" multiple />
<output id="list"></output>

参考 http://stackoverflow.com/questions/14069421/show-an-image-preview-before-upload

Django SNS 微博项目开发的更多相关文章

  1. Django实际站点项目开发经验谈

    开发了两个月的Django站点正式上线了,看着网站从无到有,从前端到后台,从本地开发到环境部署,一点一滴的堆砌成型,着实带给我不小的乐趣. Django站点介绍: 开发环境:阿里云服务器centos6 ...

  2. Django学习day14BBS项目开发1.0

    每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...

  3. Django学习day15BBS项目开发4.0(完结)

    每日测验 """ 今日考题: 1.简述自定义标签,过滤器,inclusion_tag的方法,并简要说一说三者的特点及响应流程 2.简述个人侧边栏展示及筛选业务逻辑 3.简 ...

  4. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  5. Django学习day15BBS项目开发3.0

    每日测验 """ 今日考题 1.django admin作用及用法 2.media配置如何实现,基于该配置能够做到什么以及需要注意什么 3.阐述博客园为何支持用户自定义个 ...

  6. PyCharm Django项目开发的调试方法

    下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...

  7. Django (九) 项目开发流程&项目架构

    项目开发流程&项目架构 1. 软件开发的一般流程 1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求.输出需求说明文档. ​ 2. 概要设计及详细设计: 开发对需求进行概要设计,包 ...

  8. Django学习笔记(19)——BBS+Blog项目开发(3)细节知识点补充

    本文将BBS+Blog项目开发中所需要的细节知识点进行补充,其中内容包括KindEditor编辑器的使用,BeautifulSoup 模块及其防XSS攻击,Django中admin管理工具的使用,me ...

  9. Django项目开发,XSS攻击,图片防盗链,图片验证码,kindeditor编辑器

    目录 一.Django项目开发 1. 项目开发流程 2. auth模块的补充 (1)django的admin可视化管理页面 (2)将admin可视化管理页面的模型表显示成中文 (3)auth模块的用户 ...

随机推荐

  1. 滚动条实现RGB颜色的调制(窗体程序)--JAVA基础

    1.用到的JFrame类的对象frame的方法: frame.setLayout(); 设置框架布局格式,有frame.setLayout(new GridLayout(5,1));为网格布局格式 f ...

  2. 【国家集训队2010】小Z的袜子(莫队)

    题面 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把 ...

  3. Luogu4149:[IOI2011]Race

    题目 bzoj权限题... Luogu Sol 点分治辣,边权非负,k>=1,开个\(1e6\)的桶就好辣 # include <bits/stdc++.h> # define RG ...

  4. [BZOJ1045] [HAOI2008] 糖果传递 (贪心)

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=,表示小朋友的个数.接下来n行,每行 ...

  5. 论文笔记(6):Weakly-and Semi-Supervised Learning of a Deep Convolutional Network for Semantic Image Segmentation

    这篇文章的主要贡献点在于: 1.实验证明仅仅利用图像整体的弱标签很难训练出很好的分割模型: 2.可以利用bounding box来进行训练,并且得到了较好的结果,这样可以代替用pixel-level训 ...

  6. sqoop2报错

    sqoop:000> create link --cid 4 Creating link for connector with id 4Exception has occurred during ...

  7. 【learning】二分图最大匹配的König定理

    [吐槽] 嗯好吧这个东西吧..其实是一开始做一道最小点覆盖的题的时候学到的奇妙深刻的东西 然后发现写了很长 然后就觉得不拎出来对不起自己呀哈哈哈哈 咳咳好的进入正题 [正题] 在这里码一下最小点覆盖的 ...

  8. NancyFX 第八章 内容协商

    在Web框架的范畴内,一切都是基于REST的-- 从返回包含CSS.JavaScript的网页的路由路径,到那些返回JSON数据的URL. 无论你怎么看它,两者都是必须的.我们使用一组URL来呈现UR ...

  9. About Windows 10 SDK Preview Build 17110

    在 Windows Developer Day 活动同时,微软正式 Release 了 Windows 10 SDK Preview Build 17110. Windows 10 SDK Previ ...

  10. TCP 连接关闭及TIME_WAIT探究

    这里主要记录一下TCP连接在关闭的时刻,有哪些细节问题.方便在以后的程序设计中能够注意这些细节, 以避免出现这些错误.首先我们来看一下TCP的状态转换图.如<unix网络编程>卷一所示如下 ...