一、项目概述
启动时间:24年12月7日
项目背景:本公司青年上班太忙没有时间交新朋友
项目目标:保护隐私的同时,给予员工一个释放交友信号的平台。
计划上线:2025年2月14日。24年12月开发,25年1月测试,25年2月部署。
二、功能需求
用户端功能
1 交友卡片
1.1卡片展示
每次只刷新3张信息卡片,防止信息泄露
1.2随机刷新
a、刷新按钮、每次随机刷新3张信息卡片。(缘分不够,小概率会刷新到影视作品)
1.3反馈
a、反馈二维码,扫码进入问卷星填写
2 申请列表
2.1提交申请
a、点击提交申请按钮,可以输入信息
申请ID(自动生成)
是否实名(勾选)
公司邮箱(若不实名,则不会显示)**必填**
姓名/昵称(若不实名,则显示为昵称)
性别(可保密)
部门(可保密)
毕业学校(可保密)
故乡(可保密)
出生年(保密+1990-至今,90年以前的不算青年)
星座(保密+十二星座)
MBTI(保密+16种。不清楚扫二维码跳转16person测)
爱好(文本,最多100字)
自我介绍(文本,最多500字)
照片(可以选择上传照片,也可以选择上传一张你喜欢的图片jpg/png,自动压缩到1M)
联系方式(文本,可自行选择填或不填,以及填什么)
IP(自动获取)
提交时间(自动获取)
输入信息后,会有弹窗,需要使用公司邮箱发送邮件给管理员验证身份。
~~提示用户申请成功后,为保护隐私,信息有效时间为90天,若超时,则需要联系管理员添加时间。~~
确认后弹窗会消失。
2.2申请进度列表
a、可以查看所有正在申请的列表。但是看到的信息只有【申请ID、IP、提交时间、审核进度、备注】
b、 申请ID为整数。
IP为自动获取的IP。
提交时间为YYYY年MM月DD日 HH时MM分SS秒的格式。
审核进度:待审核、审核通过、审核不通过。
备注:审核不通过时会在备注写清楚。
3 管理登录
3.1登录
a、填写账号密码,账号密码验证正确则进入管理员页面,否则提示错误。
管理员端功能
4 审核申请
4.1申请列表
a、能够查看所有申请列表的详情,待审核的在前面。
4.2审核申请
a、审核通过将,会变成交友消息,可以被填写。
b、审核不通过,将会写清楚不通过的原因,保存在备注中。
5 信息管理
5.1信息列表
a、展示现在所有的信息表格。可以点击预览信息展示它的卡片态。
b、每条信息可以修改内容(包括该条信息的**有效显示时间**)
5.2条件选择
a、实现信息筛选功能,更具条件筛选信息
5.3查询
a、实现信息搜索功能,输入关键字,查找相关信息
6 信息统计
6.1交友数据
a、能够将交友数据一键导出为execl表格
b、性别、部门、学校、MBTI、星座、故乡的统计图
6.2网站数据
a、能够显示网站的登录数据。包括登录IP,登录时间,是否管理员登录。
三、性能需求
响应时间:用户操作的响应时间应在 3 秒内,确保用户体验流畅。
吞吐量:系统应能够支持至少 20个并发用户同时进行浏览、搜索图书等操作,在高峰时期(情人节、520、七夕、圣诞节),系统吞吐量应能满足业务需求,不出现明显卡顿或崩溃现象。
可用性:系统应保证 99% 以上的时间可用,除计划内维护时间外,尽量减少因系统故障导致的服务中断,维护时间应提前通知用户。
四、安全需求
管理员数据安全:管理员密码采用加密存储,保障账号安全。
系统权限管理:对管理员和用户设置不同的权限级别,管理员具有系统管理的最高权限。
五、界面需求
用户界面设计:采用简洁、美观、易用的界面设计风格,色彩搭配协调,布局合理。
管理员界面设计:管理员界面注重功能操作的便捷性和数据展示的清晰性。
开发计划:
前端
12月9日:完成交友信息反转卡片
省略
<el-button type="primary" @click="friendCardRefresh">
<el-icon><Refresh /></el-icon>刷新
</el-button>
省略
<div id="friendCardRef1" class="grid-content friendCard" @click="friendCardFlip(1)">
<div class="friendCardFront">正面</div>
<div class="friendCardBack">反面</div>
</div>
省略
<script setup>
// 翻转交友信息卡片动画
function friendCardFlip(num){
let friendCardRef=document.getElementById('friendCardRef'+num);
friendCardRef.classList.add('flipped')
}
// 刷新交友卡片
function friendCardRefresh(){
for(let num=1;num<=3;num++){
let friendCardRef=document.getElementById('friendCardRef'+num);
friendCardRef.classList.remove('flipped')
}
}
</script>
<style lang="css">
.friendCard{
perspective: 1000px;
height: 100%;
width: 200px;
position: relative;/* 定位,并成为子div可以使用absolute的定位*/
transition: transform 0.6s;
transform-style: preserve-3d;
}
.friendCardFront,.friendCardBack{
position: absolute;
height: 100%;
width: 100%;
backface-visibility: hidden;
align-items: center;
justify-content: center;
background-color: aliceblue;
border-radius: 4px;
padding: 20px;
box-sizing: border-box;
}
.friendCardFront{
background-color: #ff95e8;
}
.friendCardBack{
background-color: #c2ffac;
transform: rotateY(180deg);
}
/* 反转动画 */
.friendCard.flipped{
transform: rotateY(180deg);
}
</style>
12月11日完成交友列表
后端
创建链接前要设计数据库为utf8
快速上手
django-admin startproject lingfriend
python manage.py startapp app1
app1的views文件写
def index(req):
return HttpResponse("欢迎使用")
lingfriend的urls写
from app1 import views
urlpatterns = [
path("admin/", admin.site.urls),
path("index/", views.index),
]
setting添加app1 修改数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用 MySQL 引擎
'NAME': 'your_database_name', # 数据库名
'USER': 'your_database_user', # 数据库用户
'PASSWORD': 'your_database_password', # 数据库密码
'HOST': 'localhost', # 数据库主机(通常是 localhost 或 127.0.0.1)
'PORT': '3306', # 数据库端口(MySQL 默认是 3306)
}
}
python manage.py runserver
查看是否能正常运行。
django4.2使用mysql5.7方法
django直接根据数据库生成model
生成的models.py编码是utf-16需要修另存为utf-8的,否则会提示:
source code string cannot contain null bytes
测试数据库链接是否正常的方法
python manage.py makemigrations 将模型类同步到数据库中
python manage.py migrate 同步到数据库中
python manage.py shell 进入shell
from app1.models import *
Login.objects.all()
django链接数据库已经存在的表的方法
django数据库操作
Model查询到的对象转JSON的方法
pip install djangorestframework安装 Django REST Framework:
# settings.py在你的 Django 项目中添加 'rest_framework' 到 INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'rest_framework',
]
# serializers.py创建一个序列化器(Serializer):
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__' # 或者列出你想要序列化的字段
# urls.py
from django.urls import path
from .views import MyModelListView
urlpatterns = [
path('mymodels/', MyModelListView.as_view(), name='mymodel-list'),
]
功能表12月16日完成:
1.1卡片展示:查询FriendCard
1.2随机刷新:查询FriendCard,随机选择,返回随机的信息
1.3反馈:设计问卷星
2.1提交申请:增加Application
2.2申请进度列表:查询Application
3.1登录:查询Account
4.1申请列表:查询Application
4.2审核申请:修改Application
5.1信息列表:查询FriendCard
5.2条件选择:条件查询FriendCard
5.3查询:条件查询FriendCard
6.1交友数据:查询FriendCard;分组统计查询FriendCard
6.2网站数据:查询Login
功能实现:
数据库
创建数据库前要设计数据库为utf8
数据库使用MySQL,表单:
数据库:LingFriend
1、登录记录 Login
——系统登录次数 count
——登录IP IP
——登录时间 login_time
——执行操作 operation
2、申请记录 Application
——申请ID app_id
——是否实名 isrealname
——公司邮箱 email
——姓名/昵称 name
——性别 gender
——毕业学校 school
——部门 department
——故乡 hometown
——出生年 brith
——星座 constellation
——MBTI MBTI
——爱好 hobby
——自我介绍 introduction
——照片 photo
——联系方式 contact
——申请人IP IP
——申请时间 submit_time
——申请进度 progress
——备注 notes
3、信息记录 FriendCard
——交友ID friend_id
——是否实名 isrealname
——公司邮箱 email
——姓名/昵称 name
——性别 gender
——毕业学校 school
——部门 department
——故乡 hometown
——出生年 brith
——星座 constellation
——MBTI MBTI
——爱好 hobby
——自我介绍 introduction
——照片 photo
——联系方式 contact
——VIP功能 vip
——访问量 show //12月16日新增
——逻辑删除 isdel //12月15日新增
4、账号 Account
——账号 id
——密码 pwd
——权限 permission
12月13日完成数据库设计