需求

做一个web聊天室,主要练习前端ajax与后台的交互:

  1. 一对一聊天和群组聊天

  2. 添加用户为好友

  3. 搜索并添加群组

  4. 管理员可以审批用户加群请求,群管理员可以有多个,群管理员可以删除,添加禁言群友

  5. 与聊天室里的人进行临时会话

  6. 可以在群组中发图片

  7. 可以与好友一对一发文件

知识点

1、多对多关联self,要有related_name=,null=true在多对多不起作用;

2、一张表有2个字段同时多对多一张表,会冲突,起一个关联名称 related_name =

3、textarea不能拖拉,resize: none;

4、js获取时间,d=new Date();  d.getHours().....

5、css样式'overflow:auto;'自动滚动,jQuery有滑动效果animate();

6、查询多对多结果以列表形式,select_related()

7、js获取csrf-token,ajax传到后台 ,页面中加{% csrf-token %},ajax获取input[name='csrfmiddlewaretoken']

8、Django队列,queue

9、jQuery定时器,取消息 setInterval()

10、浏览器存聊天记录 ,定义一个全局字典存起来。

11、js中判断字典是否有key,dict.hasOwnProperty(key)

11、递归函数最大迭代1000层,溢出会报错;ajax中递归与python的区别在于它会执行完函数的剩余部分再递归。

12、Django登录装饰器 @login_required

项目步骤

  1. 后台,利用models创建数据库表,包括表(userinfo.friends字段 ,chatgroups表)

  2. 进入后台admin页面,添加用户和群组等

  3. 前端页面设计,这里继承自前一章的BBS项目index.html

  4. 发送消息,js

  5. 分组标签,bootstrap

  6. 联系人全部获取,ajax

  7. 加入组的显示,ajax

  8. 切换正在聊天的对话框,onclick

  9. 发送消息时传给后台,js,SendMSG

  10. 后台解析消息,并放到Django队列,Django--queue

  11. 收信人收消息,ajax,get

  12. 处理队列列表,谁发的消息

  13. 收到的消息显示在对话框

  14. 阻塞住连接,阻塞等待队列中有消息

  15. 对话框按用户显示聊天记录

  16. 显示接收未读条数

  17. 群组聊天,复用单人聊天代码

  18. 登录验证

关键知识点

models:多对​多关系
1
friends = models.ManyToManyField('self',related_name='friend',blank=True,null=True)
1
2
3
4
class ChatGroups(models.Model):
    members = models.ManyToManyField(UserInfo,related_name='group_members',blank=True)   #null=true在ManyToManyField字段不起作用
    admin = models.ManyToManyField(UserInfo)     #有其它多对多字段也同时关联了同样的字段,会冲突,所以要加一个related_name=
    。。。。。。
webchat.html:获取键盘输入
1
2
3
4
5
6
7
8
9
10
11
$(function(){
    $('body').delegate('textarea','keydown',function(e){
        if(e.which == 13){
            var input = $('textarea').val();
            if($.trim(input).length > 0 ){
                //SendMSG(input);
            }    //end if
            $('textarea').val('');
        }   //endif
    });//end delegate
})   //end document
js获取时间
1
2
3
4
5
function js_date(){
        var date_obj = new Date();
        var time = date_obj.getHours()+':'+date_obj.getMinutes()+':'+date_obj.getSeconds()
        console.log(time);
    }
滑动框动画效果
1
2
3
$(".chat-body").animate({
    scrollTop:$(".chat-body")[0].scrollHeight
},500);
获取当前发送消息人姓名
1
2
'from':"{{ request.user.userinfo.id }}",
'from_name':"{{ request.user.userinfo.nickname }}",
js获取csrf-token
1
{% csrf_token %}
1
2
3
function CsrfToken(){
    return $('input[name="csrfmiddlewaretoken"]').val();
}
1
2
3
def send_msg(request):
    print request.POST.get('data'
    #{"contact_type":"single_contact","to":"3","from":"7","from_name":"陈一","msg":"ss"}

还可以通过cookie获取csrf,或者通过插件。​具体参考《csrf-token》

登录验证
settings
1
LOGIN_URL = '/login/'
views
1
2
3
4
5
from django.contrib.auth.decorators import login_required
 
@login_required
def function(request):
    ......

Django项目--web聊天室的更多相关文章

  1. Python开发一个WEB聊天室

    项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...

  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换

    前言 上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题.当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题.也是接下来 ...

  3. web聊天室

    开发一个web聊天室 功能需求: 1.用户可以与好友一对一聊天 2.群聊 所需知识 1.Django 2.bootstrap 3.CSS 4.ajax 涉及到的新的知识点 1.如果设计表结构的时候,一 ...

  4. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言

    前端时间听一个技术朋友说 LayIM 2.0 发布了,听到这个消息抓紧去官网看了一下.(http://layim.layui.com/)哎呀呀,还要购买授权[大家支持一下哦],果断买了企业版,喜欢钻研 ...

  5. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  6. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(二) 之 ChatServer搭建,连接服务器,以及注意事项。

    上篇:ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取) 上一篇我们已经完成了初步界面的搭建工作,本篇将介绍IM的核心内容 ...

  7. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(六) 之 Layim源码改造右键菜单--好友、组管理功能的实现。

    前言 上一篇中讲解了加好友的流程,本篇将介绍好友管理,群组管理的右键菜单功能.当然由于菜单项目太多,都实现也得花费时间.只讲解一下我是如何从不知道怎么实现右键菜单到会自定义菜单的一个过程.另外呢,针对 ...

  8. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十) 之 自定义系统消息和总结

    前言 本篇主要讲解一个东西,就是我们自定义系统消息.效果如下: 首先我们要做的准备工作就是改写 layim 的消息模板,如果不改的话就成为某个用户发送的消息了,那么体验就稍微差一些.找到模板我们看一下 ...

  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(不断更新中)

    项目简介 利用ASP.NET SignalR技术与Layim前端im框架实现的一个简单的web聊天室,包括单聊,群聊,加好友,加群,好友搜索,管理,群组管理,好友权限设置等功能.涉及技术: Elast ...

随机推荐

  1. Idea的live template参数中的预定义功能

    Predefined Functions to Use in Live Template Variables Item Description annotated("annotation q ...

  2. 用Pomelo 搭建一个简易的推送平台

    前言 实际上,个人感觉,pomelo 目前提供的两个默认sioconnector和hybridconnector 使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过, ...

  3. HiveServer2 的jdbc方式创建udf的修改(add jar 最好不要使用),否则会造成异常: java.sql.SQLException: Error while processing statement: null

    自从Hive0.13.0开始,使用HiveServer2 的jdbc方式创建udf的临时函数的方法由: ADD JAR ${HiveUDFJarPath} create TEMPORARY funct ...

  4. NYOJ 741 "数学家"ST

    "数学家"ST 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 ST是个非常特别的人类,不仅喜欢做一些不同平常的事,并且对于在无聊的时候怎样打发时 ...

  5. Java对象生命周期

    [TOC] 1. 创建阶段(Created) 为对象分配存储空间 开始构造对象 从父类到子类对static成员进行初始化 父类成员变量按照顺序初始化,递归调用父类的构造方法 子类成员变量按照顺序初始化 ...

  6. 【译】Python Lex Yacc手册

    本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beaz ...

  7. Swift 关键字汇总

    常见的关键字有以下4种 与声明有关的关键字:class.deinit.enum.extension.func.import.init.let.protocol.static.struct.subscr ...

  8. SOA架构改造简单记录

    前端支持PC.Mobile.H5三个平台 nginx做负载均衡,主备机,keepalived,检测脚本,master和slave切换时完成相关工作: web做集群,web仅仅是web,与后端服务模块采 ...

  9. 编写并发程序 Inversion

    做完了 scala parallel 课程作业后,觉得 scala 写并发程序的便捷性是 java 永远都追不上的.scala 的Future 和 Promise,java 里 Future 和 Co ...

  10. tolua++实现分析

    项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++.对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控.从阅 ...