用django,mysql设计一个聊天,好友验证,朋友圈功能项目
2020-03-21 21:21
92 查看
(1)重中之重!!!------------------------------------------------解决问题的思路
(1,1)如何获取每个页面的用户名字-----由登陆界面获取用户名------global变量
(1,2)用户消息验证-----由用户搜索好友账号-----数据库查询(重名,不存在,已经成为好友)--若失败,则返回报错结果(返回到text框中)-----若成功--则数据库添加(用户名,邀请人)
(2)项目演示
(2,1)登陆界面
(2,2)好友显示界面
(2,2,1)用户数据库
(2,2,2)已成为好友的数据库
(2,2,3)显示界面(例如我们登录zhangsan)
(2,2,4)我们随机选择一位聊天,例如和wangwu聊天,点击wangwu
(2,2,5)点击发送(忘记换行了。。。)再发送一句
(2,2,6)点击首页,验证搜索功能,(先进行错误示范,分别输入abc(不存在),zzz(已经成为好友),zhexiangm(正确))
(2,2,7)此时我们退出登录,再以zhexiangm用户身份登录进去,再点击消息验证,我会分别给你呈现三个图
(2,2,7,1)原先图片
(2,2,7,2)点击消息验证,点击同意
(2,2,7,3)现在的界面(此时多了一个叫zhangsan的好友)
(2,3)点击朋友圈
(2,3,1)发送一句django使我快乐
(3)功能完成!!!!
(4)代码
(4,1)urls.py
[code]from django.urls import path from . import views urlpatterns = [ path('',views.login,name='user_login'), path('index/',views.index,name='user_index'), path('chat/',views.chat,name='user_chat'), path('friend/',views.friend,name='user_friend'), path('pyq/',views.pyq,name='user_pyq'), ]
(4,2)views.py
[code]import pymysql import datetime from django.shortcuts import render from django.views.decorators.csrf import csrf_exempt from django.template import loader from django.http import HttpResponse from django.urls import path from django.shortcuts import render, redirect from django.views.decorators.csrf import csrf_exempt conn = pymysql.connect(host="localhost",user='root',password='123',charset='utf8') cursor = conn.cursor() sql_one = 'use user_management;' cursor.execute(sql_one) conn.commit() sql_two = 'select * from user;' cursor.execute(sql_two) conn.commit() user_name = [] for x in cursor.fetchall(): user_name.append(list(x)) print(user_name) name = '' def login(request): if "POST"==request.method: username = request.POST.get('username') password = request.POST.get('password') print(username) print(password) for x in user_name: if username or password: if username in x and password in x: print(2) global name#使用全局变量表明 name = username sql_third = 'use user_chat;' cursor.execute(sql_third) sql_four = 'select * from friend;' cursor.execute(sql_four) global user_friend user_friend = [] for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b)######找出用户的好友,放入名叫user——friend的数组中 sql_five = 'select name_f2f from chat;' cursor.execute(sql_five) """ 为避免为后面多增加一些成员列表; """ user_old = []#调出聊天名单 for x in cursor.fetchall(): user_old.extend(list(x)) sql_four = 'insert into chat (name_f2f,text) values (%s,%s);' for x in user_friend:###此阶段为增加用户新增加的一些名单 if name+"_"+x not in user_old and x+"_"+name not in user_old: cursor.execute(sql_four,(name+"_"+x,"")) conn.commit() sql_sex = 'select * from chat;' cursor.execute(sql_sex) user_new = [] for x in cursor.fetchall(): user_new.append(list(x)) user_chat = []#最后聊天记录 for x in user_new: print(442) print(x) print(443) user_chat.extend(x[1].split('\n')[-1]) print(user_friend) print(user_chat) return render(request,'index.html',{'name':user_friend,'chat':user_chat,"alerrt_number":'添加好友'}) """ (1) 先用friend数据库找出用户的好友 (2) 再在chat数据库找出两者的对话,如果没有,则添加数据进去###格式为name_name,text为对话内容 (3) 返回的数据有 ---好友名单--按钮聊天功能(user_friend) --聊天记录(首界面只显示最后一条) """ return render(request ,'login.html', {"error":"please input your username and your password"}) else: return render(request,'login.html') def index(request): if request.method=="POST": global name global user_friend sql_one_one = 'use user_chat;' cursor.execute(sql_one_one) conn.commit() sql_four = 'select * from friend;' cursor.execute(sql_four) user_friend = [] for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b) ######找出用户的好友,放入名叫user——friend的数组中 for x in user_friend: if request.POST.get(x): sql_one_one = 'use user_chat;' cursor.execute(sql_one_one) conn.commit() sql_one_two = 'select * from chat;' cursor.execute(sql_one_two) conn.commit() ac = [] """ 用户选定与谁聊天,调出聊天记录 """ for y in cursor.fetchall(): if x in list(y)[0].split('_') and name in list(y)[0].split('_'):####找出是和谁在聊天 把连天记录提取出来(--日期+内容--) ac = list(y)[1].split('\n') return render(request,'chat.html',{"name":user_friend,"content":ac,"name_with_who":x,"alerrt_number":'添加好友'}) else:# 使用全局变量表明 alerrt = 0 alert = '' sql_one = 'use user_management;' cursor.execute(sql_one) conn.commit() sql_two = 'select * from user;' cursor.execute(sql_two) conn.commit() user_name_one = [] for x in cursor.fetchall(): user_name_one.append(list(x)[0]) print(user_name_one)#所有的用户 print(123) print(user_friend)#现在的好友 print(1234) print(request.GET.get('friend')) if request.GET.get('friend'): #####检测用户是否点击了添加好友功能 if request.GET.get('friend') not in user_friend: if request.GET.get('friend') not in user_name_one: alerrt = 0 else: sql_1 = 'use user_chat;' cursor.execute(sql_1) conn.commit() sql_2 = 'insert into friend_message (name,friend) values (%s,%s);' cursor.execute(sql_2, (name, request.GET.get('friend'))) conn.commit() alerrt = 3 else: alerrt = 1 sql_third = 'use user_chat;' cursor.execute(sql_third) sql_four = 'select * from friend;' cursor.execute(sql_four) user_friend = [] for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b) ######找出用户的好友,放入名叫user——friend的数组中 sql_five = 'select name_f2f from chat;' cursor.execute(sql_five) """ 为避免为后面多增加一些成员列表; """ user_old = [] # 调出聊天名单 for x in cursor.fetchall(): user_old.extend(list(x)) sql_four = 'insert into chat (name_f2f,text) values (%s,%s);' for x in user_friend: ###此阶段为增加用户新增加的一些名单 if name + "_" + x not in user_old and x + "_" + name not in user_old: cursor.execute(sql_four, (name + "_" + x, "你们已成为好友了")) conn.commit() sql_sex = 'select * from chat;' cursor.execute(sql_sex) user_new = [] for x in cursor.fetchall(): user_new.append(list(x)) user_chat = [] # 最后聊天记录 for x in user_new: user_chat.extend(x[1].split('\n')[-1]) print(user_friend) print(user_chat) if alerrt == 0: alert = '好友账号不存在' elif alerrt == 1: alert = '已成为好友,请勿重新添加' elif alerrt == 3: alert = '添加成功,请等待对方通知' return render(request, 'index.html', {'name': user_friend, 'chat': user_chat,'alerrt_number':alert}) def chat(request): if request.method=="POST": global name global user_friend sql_one = 'use user_management;' cursor.execute(sql_one) conn.commit() alert = '' alerrt = 0 sql_two = 'select * from user;' cursor.execute(sql_two) conn.commit() user_name_one = [] for x in cursor.fetchall(): user_name_one.append(list(x)[0]) """ 用户提交发送,内容截取,前面加上时间字段 采用datetime库 """ sql_one_one = 'use user_chat;' cursor.execute(sql_one_one) conn.commit() sql_four = 'select * from friend;' cursor.execute(sql_four) user_friend = [] for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b) ######找出用户的好友,放入名叫user——friend的数组中 """ 获取用户名和内容 """ print(user_friend) for x in user_friend: if request.POST.get(x):####确定发送的用户 print('yes') str_one =datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') friend = request.POST.get(x)####发送的内容 sql_two_one = 'use user_chat;' cursor.execute(sql_two_one) conn.commit() sql_two_third = 'select name_f2f from chat;' cursor.execute(sql_two_third) conn.commit() who = ''####确定谁和谁聊天 for i in cursor.fetchall(): if name in list(i)[0].split('_') and x in list(i)[0].split('_'): who = list(i)[0] sql_kennys = 'select text from chat where name_f2f = %s' cursor.execute(sql_kennys,(who)) chat_old = [] for x in cursor.fetchall(): chat_old.append(list(x)) sql_two_two = 'update chat set text = %s where name_f2f = %s;' print(chat_old) cursor.execute(sql_two_two,(chat_old[0][0]+"发送人: "+name+'\n'+str_one+" "+friend+'\n',who)) ####防止sql报错------ Unknown column 'x' in 'where clause' 存储格式为----时间+空格+内容+换行 sql_sex = 'select * from chat;' cursor.execute(sql_sex) user_new = [] for x in cursor.fetchall(): user_new.append(list(x)) user_chat = [] # 最后聊天记录 for x in user_new: user_chat.extend(x[1].split('\n')[-1]) print(user_friend) print(user_chat) for x in user_friend: if request.POST.get(x): sql_one_one = 'use user_chat;' cursor.execute(sql_one_one) conn.commit() sql_one_two = 'select * from chat;' cursor.execute(sql_one_two) conn.commit() ac = [] """ 用户选定与谁聊天,调出聊天记录 """ for y in cursor.fetchall(): if x in list(y)[0].split('_') and name in list(y)[0].split('_'): ####找出是和谁在聊天 把连天记录提取出来(--日期+内容--) ac = list(y)[1].split('\n') if alerrt==0: alert='好友账号不存在' elif alerrt==1: alert='已成为好友,请勿重新添加' elif alerrt==3: alert='添加成功,请等待对方通知' return render(request, 'chat.html', {"name": user_friend, "content": ac, "name_with_who": x, "alerrt_number":alert}) def friend(request): if request.method == "GET": global name print(333) print(name) print(444) sql_1_1 = 'use user_chat;' cursor.execute(sql_1_1) conn.commit() sql_simple = 'select * from friend_message;' cursor.execute(sql_simple) conn.commit() ac = [] for x in cursor.fetchall(): ac.append(list(x)) ac_one = [] for x in ac: if name==x[1]: ac_one.append(x) return render(request,'friend.html',{"friend":ac_one}) else: sql_one = 'use user_management;' cursor.execute(sql_one) conn.commit() sql_two = 'select * from user;' cursor.execute(sql_two) conn.commit() user_name_two = [] for x in cursor.fetchall(): user_name_two.append(list(x)[0]) for x in user_name_two: print(x) print(request.POST.get(x)) if request.POST.get(x) == '同意': sql_third = 'use user_chat;' cursor.execute(sql_third) conn.commit() sql_third = 'insert into chat (name_f2f,text) value (%s,%s);' cursor.execute(sql_third,(name+'_'+x,'你们已成为好友了')) sql_1_1 = 'use user_chat;' cursor.execute(sql_1_1) conn.commit() sql_four = 'delete from friend_message where (name = %s and friend = %s);' cursor.execute(sql_four, (x, name)) sql_1_1 = 'use user_chat;' cursor.execute(sql_1_1) conn.commit() sql_123 = 'insert into friend (user_name_one,user_name_two) values (%s,%s);' cursor.execute(sql_123,(name,x)) conn.commit() sql_simple = 'select * from friend_message;' cursor.execute(sql_simple) conn.commit() ac = [] for x in cursor.fetchall(): ac.append(list(x)) ac_one = [] for x in ac: if name == x[1]: ac_one.append(x) return render(request, 'friend.html', {"friend": ac_one}) elif request.POST.get(x) =='拒绝': sql_1_1 = 'use user_chat;' cursor.execute(sql_1_1) conn.commit() sql_four = 'delete from friend_message where (name = %s and friend = %s);' cursor.execute(sql_four,(x,name)) sql_simple = 'select * from friend_message;' cursor.execute(sql_simple) conn.commit() ac = [] for x in cursor.fetchall(): ac.append(list(x)) ac_one = [] for x in ac: if name == x[1]: ac_one.append(x) return render(request, 'friend.html', {"friend": ac_one}) def pyq(request): if request.method == 'GET': global name#用户 sql_third = 'use user_chat;' cursor.execute(sql_third) conn.commit() sql_four = 'select * from friend;' cursor.execute(sql_four) user_friend = []####用户的好友 for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b) ######找出用户的好友,放入名叫user——friend的数组中 sql_five = 'select * from pyq;' cursor.execute(sql_five) conn.commit() user_pyq = [] for x in cursor.fetchall(): user_pyq.append(list(x)) user_pyq_old = []####用户以及用户好友发送的动态,格式为 名字 内容 for x in user_pyq: if x[0] in user_friend or x[0] == name: user_pyq_old.append(x) return render(request,'pyq.html',{"friend":user_pyq_old,"name":name}) else: user_value = request.POST.get(name)#获取用户发送的内容 str_one = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#显示当地的时间 sql_1 = 'use user_chat;' cursor.execute(sql_1) conn.commit() sql_2 = 'insert into pyq (user_name,user_pyq,user_time) values (%s,%s,%s);' cursor.execute(sql_2,(name,user_value,str_one)) sql_third = 'use user_chat;' cursor.execute(sql_third) conn.commit() sql_four = 'select * from friend;' cursor.execute(sql_four) user_friend = [] ####用户的好友 for x in cursor.fetchall(): b = list(x) if name in b: b.remove(name) user_friend.extend(b) ######找出用户的好友,放入名叫user——friend的数组中 sql_five = 'select * from pyq;' cursor.execute(sql_five) conn.commit() user_pyq = [] for x in cursor.fetchall(): user_pyq.append(list(x)) user_pyq_old = [] ####用户以及用户好友发送的动态,格式为 名字 内容 for x in user_pyq: if x[0] in user_friend or x[0] == name: user_pyq_old.append(x) return render(request, 'pyq.html', {"friend": user_pyq_old, "name": name})
(4,3)templates
(4,3,1)chat.html
[code]<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>user_chat</title> </head> <body> <div style="display: flex;align-content: center"> <div style="width:25%;text-align: center"><a href="http://127.0.0.1:8000/index/">首页</a></div> <div style="width:25%;text-align: center"><a href="http://127.0.0.1:8000/pyq/">朋友圈</a> </div> <div style="width:25%;text-align: center"><a href="/">退出</a> </div> </div> <div style="text-align: center;width: 8.75%;font-size: 10px;border:1px solid #000">好友</div> {% for x in name %} <div style="text-align: left; width:30%"> <form action="{% url 'user_chat' %}" method="POST"> {% csrf_token %} <input type="number" name="{{ x }}" min="0" style="width: 0;height: 0;display:none"> <input type="submit" style="width:30%;height: 20px" value="{{ x }}" name ="{{ x }}"> </form> </div> {% endfor %} <!--头部列出好友列表--> <div style="text-align: right;width: 70%"> <textarea rows="20" cols="200" readonly> {% for x in content %} {{ x }} {% endfor %} </textarea> </div> <form action="{% url 'user_chat' %}" method="POST"> {% csrf_token %} <input type="text" style="width:100%;height: 80%" name="{{ name_with_who }}"> <input type="submit" style=""value="发送"> </form> </body> </html>
(4,3,2)friend.html
[code]<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户验证</title> </head> <body> {% for x in friend %} <p>邀请人:{{ x.0 }}</p> <form action="{% url 'user_friend' %}" method="POST"> {% csrf_token %} <input type="text" name="{{ x.0 }}" style="width: 0;height: 0;display:none" value="YES"> <input type="submit" style="width:30%;height: 20px" value="同意" name ="{{x.0}}"> </form> <form action="{% url 'user_friend' %}" method="POST"> {% csrf_token %} <input type="text" name="{{ x.0 }}" style="width: 0;height: 0;display:none" value="NO"> <input type="submit" style="width:30%;height: 20px" value="拒绝" name ="{{ x.0 }}"> </form> {% endfor %} <div style="width:25%;text-align: center"><a href="http://127.0.0.1:8000/index/">返回首页</a></div> </body> </html>
(4,3,3)index.html
[code]<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>user_login</title> </head> <body> <form action="{% url 'user_index' %}"> <div style="display: flex;align-content: center"> <div style="width:20%;text-align: center"><a href="http://127.0.0.1:8000/index/">首页</a></div> <form action="{% url 'user_index' %}" method="GET"> {% csrf_token %} <div style="width:25%;"><input type="text" name="friend" value="{{alerrt_number}}"><input type="submit" value="搜索"></div> </form> <div style="width:15%;text-align: center"><a href="http://127.0.0.1:8000/friend/">消息验证{{ number }}</a> </div> <div style="width:20%;text-align: center"><a href="/">退出</a> </div> <div style="width:20%;text-align: center"><a href="http://127.0.0.1:8000/pyq/">朋友圈</a> </div> </div> </form> <div style="text-align: center;width: 8.75%;font-size: 10px;border:1px solid #000">好友</div> {% for x in name %} <div style="text-align: left; width:30%"> <form action="{% url 'user_index' %}" method="POST"> {% csrf_token %} <input type="number" name="{{ x }}" min="0" style="width: 0;height: 0;display:none"> <input type="submit" style="width:30%;height: 20px" value="{{ x }}" name ="{{ x }}"> </form> </div> {% endfor %} </body> </html>
(4,3,4)login.html
[code]<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>user_login</title> </head> <body> <div style="text-align: center;"> <form action="{% url 'user_login' %}" method="POST"> {% csrf_token %} 账号:<input type="text" name="username" placeholder="请输入用户名"><br> 密码:<input type="password" name="password" placeholder="请输入密码"><br> 登录:<input type="submit" name="login" value="登录" style="width:170px"><br> {{ error }}<br> </form> </div> </body> </html>
(4,3,5)pyq.html
[code]<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>朋友圈动态</title> </head> <body> <div style="display: flex;align-content: center"> <div style="width:20%;text-align: center"><a href="http://127.0.0.1:8000/index/">首页</a></div> <div style="width:15%;text-align: center"><a href="http://127.0.0.1:8000/friend/">消息验证{{ number }}</a> </div> <div style="width:20%;text-align: center"><a href="/">退出</a> </div> <div style="width:20%;text-align: center"><a href="http://127.0.0.1:8000/pyq/">朋友圈</a> </div> </div> <div style="text-align: right;width: 70%"> <textarea rows="20" cols="200" readonly> {% for x in friend %} 时间:{{ x.2 }} 姓名:{{ x.0}} 内容:{{ x.1 }} {% endfor %} </textarea> </div> <form action="{% url 'user_pyq' %}" method="POST"> {% csrf_token %} <input type="text" style="width:100%;height: 80%" name="{{ name }}" value="快来分享你的快乐事件吧!!!"> <input type="submit" style=""value="发送"> </form> </body> </html>
(5) up感想:
其实做了这项目用时间5天左右吧,主要是写思路,有些报错就很傻,几处错误,慢慢改就是了,写代码最重要是写注释!!!,写注释!!!,写注释!!!,方便理清思路,还有一点不足之处就是用户传图片我没加,可能是更新版本再加吧(哈哈),做这些项目最重要是提升自己的数据处理能力(主要),由数据库或者用户给的数据如何进行处理变成我们想要的数据这一点颇为重要,未来的路还很长,前端问题始终是自己心里面的一块梗,自己在python工程师的方向前进,俗话说:既然选择了远方 便只顾风雨兼程,加油吧!!!!
相关文章推荐
- java在线聊天项目1.3版 ——设计好友列表框功能
- java在线聊天项目1.3版设计好友列表框功能补充,因只要用户登录就发送一串新列表,导致不同客户端好友列表不同问题
- mysql笔记(一)--设计一个项目需求,灌入一万数据先
- Django项目之CRM客户关系管理——表结构的设计及MySQL的连接
- ASP.NET MVC5+MySql使用ASP.NET 身份验证实现用户和角色功能 1 概述 目标:使用MySql数据库,建立一个使用ASP.NET 身份验证的应用,并实现角色功能,身份
- 的VARCHART JGantt让你设计一个甘特图包含精确规划需求所需的功能,无论是项目计划,人员配置,生产控制或其他应用领域。
- J2EE项目中如何设计一个比较通用的Excel模板功能
- django项目:实现一个完整的博客功能(1)
- django项目:实现一个完整的博客功能(2)
- django项目开发模拟auth的做一个登录验证(一)
- django项目开发模拟auth的做一个登录验证(二)
- 使用sqlite3的接口函数完成一个用户登录验证功能模块设计 要封装成独立函数,在独立的main中调用测试;
- 一个完整的Nodejs项目 完成连接数据库(MySQL),登陆、注册功能 session的使用 和发送邮件
- django项目基于钩子验证的注册功能
- 一个小型即时通讯项目的开发经验4--模块设计与功能分配
- 一个小型即时通讯项目的开发经验3--模块设计与功能分配
- django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
- java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现
- 一个基于wap1.0的web项目(图文)--实现登陆验证
- PROJECT ASSISTANT:创建一个项目、目标并一次添加多个功能集