From d768d5eda17e36273d60616ed1ebd21b5e445134 Mon Sep 17 00:00:00 2001
From: Pupil59 <17373118@buaa.edu.cn>
Date: Wed, 20 May 2020 00:24:17 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AE=9E=E4=BD=93=E7=9A=84?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E3=80=81=E4=BF=AE=E6=94=B9=E3=80=81=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E3=80=81=E6=9F=A5=E8=AF=A2=E4=BB=A5=E5=8F=8A=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E5=88=9B=E5=BB=BA=E5=8A=9F=E8=83=BD,=20close=20#59,?=
=?UTF-8?q?=20#55,=20#56?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
textMark/.idea/workspace.xml | 183 ++++++++++--------
.../migrations/0002_auto_20200511_2155.py | 28 +++
textMark/db.sqlite3 | Bin 176128 -> 176128 bytes
textMark/project/entity.py | 1 +
textMark/project/relation.py | 2 +-
textMark/project/tests_entity.py | 131 ++++++++-----
textMark/project/text.py | 79 ++++++++
textMark/register/models.py | 4 +
textMark/register/user.py | 85 +++++++-
textMark/templates/textMark/index.html | 1 -
textMark/templates/textMark/user-info.html | 2 +-
11 files changed, 381 insertions(+), 135 deletions(-)
create mode 100644 textMark/common/migrations/0002_auto_20200511_2155.py
create mode 100644 textMark/project/text.py
diff --git a/textMark/.idea/workspace.xml b/textMark/.idea/workspace.xml
index 5e5f15a..83956b3 100644
--- a/textMark/.idea/workspace.xml
+++ b/textMark/.idea/workspace.xml
@@ -9,24 +9,17 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
@@ -37,31 +30,31 @@
-
-
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
+
+
@@ -80,10 +73,11 @@
-
-
+
+
+
@@ -114,7 +108,6 @@
-
@@ -128,6 +121,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -158,12 +165,13 @@
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -373,9 +400,15 @@
-
+
+
+
+
+
+
+
@@ -393,7 +426,7 @@
-
+
@@ -423,7 +456,9 @@
-
+
+
+
@@ -446,9 +481,7 @@
-
-
-
+
@@ -477,9 +510,7 @@
-
-
-
+
@@ -530,9 +561,7 @@
-
-
-
+
@@ -605,9 +634,7 @@
-
-
-
+
@@ -658,9 +685,7 @@
-
-
-
+
@@ -745,14 +770,14 @@
-
+
-
-
+
+
@@ -763,56 +788,58 @@
-
-
-
-
-
-
-
-
+
-
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/textMark/common/migrations/0002_auto_20200511_2155.py b/textMark/common/migrations/0002_auto_20200511_2155.py
new file mode 100644
index 0000000..30d063f
--- /dev/null
+++ b/textMark/common/migrations/0002_auto_20200511_2155.py
@@ -0,0 +1,28 @@
+# Generated by Django 3.0.5 on 2020-05-11 13:55
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('common', '0001_initial'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='project',
+ name='user',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+ ),
+ migrations.AddField(
+ model_name='entity',
+ name='project',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='common.Project'),
+ ),
+ ]
diff --git a/textMark/db.sqlite3 b/textMark/db.sqlite3
index 04830b7b467dbfc3ee0a156b5c84120303880b9b..c8d1af99952f6df49999d82549d34342055c0d71 100644
GIT binary patch
delta 891
zcmaiuT}V@L7{+TgQ)H=LZtTGBQNOdCu86&J98;b+|a2+MJ$Uq@Z*2Y)8kOGDn~U
zL1krOIVmWOh%Umc$wWs*SKSFgH-(9kn@S8#kca|1Q@qfNf(>
zK4`Lf16!`)Di}S@$Yv^nASnDoW
z+*_T1HTVXL^7_wm)qALft$$S|`!F0Q$&B4SLpW^6;kWP-9>5TMgg&|C5)8mRl6x8@
z$@Q`DdT4s}`fU9EHFbtkfgF=zY;r6+>HSMK>3ph=LnPv}!v#EV7LwhpJH
zb@~QLwj$Wx>=eJ9>{btc4TACVMc597GkZf+dkq_`elgDo5
zwS1M$BZy}yi_s=otbEYiRL==wD18{a#j(8AwN1^=5G8OOHZ=z%2r
E7j}CVv;Y7A
delta 656
zcmZp8z}4`8Yl1YR^+XwGM(d3U%jAXJnfQ0}Kj$ytU&BA0-<>~-|H@{;1bu!XK~83M
z#^n6m-2A-w)Vz|+lFG@E`ZeO*%$l4~(SoA-X8$mtKa-q7#dj_TUZ%c>RFnbTACUZmZxG!8k*>tnweV~ngS)c7#J8B`F}D1
z5&LGIf{*;nK*6SlZ4Hbp0X&TSe;9yB2B=1QvtYv;em-VqPEKC1mbVQ2Z#N4TJm%m2
z_C2GB05AVH1}6TG4E(?OKk|PBOYpNWb27336|*vfSWJsH7;M_Wh)ty|no3^&M?k}_
zF#wIa#(xcH*a?0uE*3ThVMb2Qr|V|O0nOx>1hQYw*!*((7CBxfHU<#)$=*3ncI=Yd
zR=~7PF09HlKQk}QxGXu*+}I$oI5WfCAT`h2GPA72BCE70-#D_$wZhNE)zHr<)Wo;S
z(>N;2E6dNt)7aM~(9qvK&^XE^xym;yD95iVC(GX@&?L&;D>uqzI!`}SuW3bOt|!m{
z#|q!9(26LRux#I4-wJ=1sBFL7sO-orN7KlxbRbU2iE?qv^sCCq25Qcney*QMh1b-|
iz}U*vLeJ2^*uZl8|9+;2{0fAex@`f|Cw@K@ohAV0gv3Dr
diff --git a/textMark/project/entity.py b/textMark/project/entity.py
index 3ad1f1a..89ef128 100644
--- a/textMark/project/entity.py
+++ b/textMark/project/entity.py
@@ -112,6 +112,7 @@ def modifyentity(request):
'ret': 1,
'msg': f'实体名在项目中已经存在,添加者为{username}'
})
+
entity.name = newdata['name']
# 注意,一定要执行save才能将修改信息保存到数据库
diff --git a/textMark/project/relation.py b/textMark/project/relation.py
index a771f41..5c39547 100644
--- a/textMark/project/relation.py
+++ b/textMark/project/relation.py
@@ -132,7 +132,7 @@ def modifyrelation(request):
newdata = request.params['newdata']
try:
- relation = Entity.objects.get(id=rid)
+ relation = Relation.objects.get(id=rid)
except Entity.DoesNotExist:
return {
'ret': 1,
diff --git a/textMark/project/tests_entity.py b/textMark/project/tests_entity.py
index 156351d..708ab9c 100644
--- a/textMark/project/tests_entity.py
+++ b/textMark/project/tests_entity.py
@@ -1,18 +1,18 @@
-from rest_framework.test import APIClient, APITestCase
+from rest_framework.test import APIClient, APITestCase
from common.models import Entity
from common.models import Project
from register.models import big_user
from django.db.models import Count
import json
-class entityTests(APITestCase):
+class entityTests(APITestCase):
def setUp(self):
self.client = APIClient()
self.assertEqual(big_user.objects.count(), 0)
# 注册
response = self.client.post(
- path= '/user/register/',
+ path='/user/register/',
data=
{
'user_id': '3100',
@@ -20,65 +20,64 @@ def setUp(self):
'user_name': 'dz'
}
)
-
+
self.assertEqual(response.status_code, 200)
response_content = json.loads(response.content)
self.assertEqual(big_user.objects.count(), 1)
- self.assertEqual(response_content['msg'], '创建成功')
-
- data= {
- 'action':'add_project',
+ self.assertEqual(response_content['msg'], '创建成功')
+
+ data = {
+ 'action': 'add_project',
'data': {
- 'name':'project1'
+ 'name': 'project1'
}
}
-
+
response = self.client.post(
path='/user/projects',
data=json.dumps(data),
- content_type= 'application/json'
+ content_type='application/json'
)
self.assertEqual(response.status_code, 200)
self.assertEqual(Project.objects.count(), 1)
project_id = (json.loads(response.content))['id']
-
-
- data={
+
+ data = {
'project_id': project_id
}
response = self.client.post(
- path= '/api/project/pro_session',
+ path='/api/project/pro_session',
data=json.dumps(data),
- content_type= 'application/json'
+ content_type='application/json'
)
def test_add_entity_duplicate(self):
# 添加实体1
self.assertEqual(Entity.objects.count(), 0)
- data= {
- 'action':'add_entity',
+ data = {
+ 'action': 'add_entity',
'data': {
- 'name':'entity1'
+ 'name': 'entity1'
}
}
response = self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 1)
# 添加实体2
- data= {
- 'action':'add_entity',
+ data = {
+ 'action': 'add_entity',
'data': {
- 'name':'entity2'
+ 'name': 'entity2'
}
}
response = self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 2)
@@ -87,81 +86,115 @@ def test_add_entity_duplicate(self):
path='/api/project/entities',
data=
{
- 'action':'list_entity'
+ 'action': 'list_entity'
}
)
response_content = json.loads(response.content)
- self.assertEqual(len(response_content['retlist']), 2)
+ self.assertEqual(len(response_content['retlist']), 2)
# 添加实体--重名
- data= {
- 'action':'add_entity',
+ data = {
+ 'action': 'add_entity',
'data': {
- 'name':'entity2'
+ 'name': 'entity2'
}
}
response = self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 2)
def test_del_entity(self):
# 添加实体1
self.assertEqual(Entity.objects.count(), 0)
- data= {
- 'action':'add_entity',
+ data = {
+ 'action': 'add_entity',
'data': {
- 'name':'entity1'
+ 'name': 'entity1'
}
}
response = self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 1)
entity_id_1 = (json.loads(response.content))['id']
# 添加实体2
- data= {
- 'action':'add_entity',
+ data = {
+ 'action': 'add_entity',
'data': {
- 'name':'entity2'
+ 'name': 'entity2'
}
}
response = self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 2)
entity_id_2 = (json.loads(response.content))['id']
# 删除实体1
- data= {
+ data = {
'action': 'del_entity',
'id': entity_id_1
}
self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 1)
self.assertEqual((json.loads(response.content))['ret'], 0)
# 删除实体2
- data= {
+ data = {
'action': 'del_entity',
'id': entity_id_2
}
self.client.post(
path='/api/project/entities',
- data= json.dumps(data),
- content_type= 'application/json'
+ data=json.dumps(data),
+ content_type='application/json'
)
self.assertEqual(Entity.objects.count(), 0)
self.assertEqual((json.loads(response.content))['ret'], 0)
+
+ def test_modify_entity(self):
+ self.assertEqual(Entity.objects.count(), 0)
+ # 添加实体1
+ data = {
+ 'action': 'add_entity',
+ 'data': {
+ 'name': 'entity1'
+ }
+ }
+ response = self.client.post(
+ path='/api/project/entities',
+ data=json.dumps(data),
+ content_type='application/json'
+ )
+ self.assertEqual(Entity.objects.count(), 1)
+ entity_id_1 = (json.loads(response.content))['id']
+
+ # 修改实体1
+ data = {
+ 'action': 'modify_entity',
+ 'id': entity_id_1,
+ 'newdata': {
+ 'name': '实体2'
+ }
+ }
+ self.client.post(
+ path='/api/project/entities',
+ data=json.dumps(data),
+ content_type='application/json'
+ )
+ self.assertEqual(Entity.objects.count(), 1)
+ self.assertEqual(Entity.objects.get(id=entity_id_1).name, '实体2')
+ self.assertEqual((json.loads(response.content))['ret'], 0)
diff --git a/textMark/project/text.py b/textMark/project/text.py
new file mode 100644
index 0000000..117a935
--- /dev/null
+++ b/textMark/project/text.py
@@ -0,0 +1,79 @@
+# from django.http import JsonResponse
+# import json
+# from django.core.files.storage import default_storage
+# from django.core.files.base import ContentFile
+#
+# from common.models import Text
+#
+#
+# def dispatcher(request):
+# # 将请求参数统一放入request 的 params 属性中,方便后续处理
+# if request.user.is_authenticated():
+# return JsonResponse({
+# 'ret': 302,
+# 'msg': '未登录'},
+# status=302)
+#
+# # GET请求 参数在url中,同过request 对象的 GET属性获取
+# if request.method == 'GET':
+# request.params = request.GET
+#
+# # POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取
+# elif request.method in ['POST', 'DELETE']:
+# # 根据接口,POST/PUT/DELETE 请求的消息体都是 json格式
+# request.params = json.loads(request.body)
+#
+# # 根据不同的action分派给不同的函数进行处理
+# action = request.params['action']
+# if action == 'list_text':
+# return listtexts(request)
+# elif action == 'add_text':
+# return addtext(request)
+# elif action == 'del_text':
+# return deltext(request)
+#
+# else:
+# return JsonResponse({'ret': 1, 'msg': '不支持该类型http请求'})
+#
+#
+# def listtexts(request):
+# # 返回一个 QuerySet 对象 ,包含所有的表记录
+# pid = request.params['project_id']
+# qs = Text.objects.filter(project_id=pid).values('id', 'name', 'text')
+#
+# # 将 QuerySet 对象 转化为 list 类型
+# retlist = list(qs)
+#
+# return JsonResponse({'ret': 0, 'retlist': retlist})
+#
+#
+# def addtext(request):
+# info = request.params['data']
+#
+# text = request.Files.get('text')
+#
+# # path = default_storage.save('')
+#
+# record = Text.objects.create(name=text.name,
+# text=text,
+# project_id=info['project_id'])
+#
+# return JsonResponse({'ret': 0, 'id': record.id})
+#
+#
+# def deltext(request):
+# textid = request.params['id']
+#
+# try:
+# # 根据 id 从数据库中找到相应的客户记录
+# text = Text.objects.get(id=textid)
+# except text.DoesNotExist:
+# return {
+# 'ret': 1,
+# 'msg': f'id 为`{textid}`的文本不存在'
+# }
+#
+# # delete 方法就将该记录从数据库中删除了
+# text.delete()
+#
+# return JsonResponse({'ret': 0})
diff --git a/textMark/register/models.py b/textMark/register/models.py
index bbc3da9..4d144bc 100644
--- a/textMark/register/models.py
+++ b/textMark/register/models.py
@@ -5,6 +5,10 @@
class big_user(AbstractUser):
name = models.CharField(max_length=40)
+ friends = set()
+ friend_apply = set()
+ project_invite = set()
+ fri_pro = set()
diff --git a/textMark/register/user.py b/textMark/register/user.py
index 7ae4c5f..1f3f961 100644
--- a/textMark/register/user.py
+++ b/textMark/register/user.py
@@ -3,8 +3,8 @@
from django.http import JsonResponse
from django.contrib.auth import authenticate, login
import json
-from django.contrib.sessions.models import Session
from django.contrib.auth.hashers import check_password
+from common.models import Project
def dispatch(request):
@@ -21,14 +21,13 @@ def dispatch(request):
def modify_name(request):
user = request.user
- try:
- user = big_user.objects.get(username=user.username)
+ if user is not None:
user.name = request.params["user_name"]
return JsonResponse({
"ret": 0,
"msg": "修改成功"
})
- except user.DoesNotExist:
+ else:
return JsonResponse({
"ret": -1,
"msg": "用户ID不存在"
@@ -121,7 +120,83 @@ def get_user_info(request):
})
else:
return JsonResponse({
- "ret":0,
+ "ret": 0,
"user_name": user.name,
"user_id": user.username
})
+
+
+def get_friends(request):
+ user = request.user
+ js = {
+ 'sum': len(user.friends),
+ 'friend': []
+ }
+ for friend in user.friends:
+ js['friend'].append(friend.username)
+ js['friend'].append(friend.name)
+ return JsonResponse(json.dumps(js))
+
+
+def apply_friends(request):
+ to_id = request.POST.get('user_id')
+ from_user = request.user
+ try:
+ to_user = big_user.objects.get(username=to_id)
+ if from_user in to_user.friends:
+ return JsonResponse({
+ 'ret': -2,
+ 'msg': "已与该用户成为好友"
+ })
+ else:
+ to_user.friend_apply.append(from_user)
+ return JsonResponse({
+ "ret": 0,
+ "msg": "邀请已发送"
+ })
+ except big_user.DoesNotExist:
+ return JsonResponse({
+ "ret": -1,
+ "msg": "用户ID不存在"
+ })
+
+
+def friend_confirm(request):
+ action = request.POST.get('action')
+ if action == 'friend_apply_accept':
+ user = request.user
+ fri_id = request.POST.get('id')
+ fri = big_user.objects.get(username=fri_id)
+ user.friends.add(fri)
+ user.friend_apply.remove(fri)
+
+
+def get_fri_appli(request):
+ user = request.user
+ js = {
+ 'sum': len(user.friends),
+ 'friend': []
+ }
+ for app_user in user.friends:
+ js['friend'].append(app_user.username)
+ js['friend'].append(app_user.name)
+ return JsonResponse(json.dumps(js))
+
+
+def invite(request):
+ user = request.user
+ to_id = request.POST.get('friend_id')
+ to_user = big_user.objects.get(username=to_id)
+ project_id = request.POST.get('friend_id')
+ inv_prject = Project.objects.get(id=project_id)
+ if to_id not in user.friends:
+ return JsonResponse({
+ "ret": -1,
+ "msg": "未与该用户成为好友"
+ })
+ to_user.project_invite.add((user, inv_prject))
+ return JsonResponse({
+ "ret": 0,
+ "msg": "邀请已发送"
+ })
+
diff --git a/textMark/templates/textMark/index.html b/textMark/templates/textMark/index.html
index b7b4a8b..1d712f4 100644
--- a/textMark/templates/textMark/index.html
+++ b/textMark/templates/textMark/index.html
@@ -315,7 +315,6 @@
type:"GET",
url:"/user/other",
contentType: "application/json",
- async:false,
success: function (data) {
if (data.ret == 0) {
console.log(data);
diff --git a/textMark/templates/textMark/user-info.html b/textMark/templates/textMark/user-info.html
index 958fdbc..68348d9 100644
--- a/textMark/templates/textMark/user-info.html
+++ b/textMark/templates/textMark/user-info.html
@@ -179,7 +179,7 @@
console.log(data);
if(data.ret == 0) {
alert("项目创建成功");
- //window.location.href = "/index";
+ location.reload();
} else {
alert(data.msg);
}