Explorar o código

group校验完成

zoe %!s(int64=4) %!d(string=hai) anos
pai
achega
eacb3a77e3

+ 12 - 0
account/admin.py

@@ -1,3 +1,15 @@
 from django.contrib import admin
+from .models import Profile, Devices
+
 
 # Register your models here.
+class ProfileAdmin(admin.ModelAdmin):
+    list_display = ["user", "email", "root_folder_id"]
+
+
+class DevicesAdmin(admin.ModelAdmin):
+    list_display = ["user", "last_login_time", "device_uid", "token"]
+
+
+admin.site.register(Profile, ProfileAdmin)
+admin.site.register(Devices, DevicesAdmin)

+ 37 - 0
account/migrations/0001_initial.py

@@ -0,0 +1,37 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:01
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('folder', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Profile',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('email', models.CharField(blank=True, max_length=20)),
+                ('root_folder', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='root_folder', to='folder.folder')),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Devices',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('last_login_time', models.DateField(auto_now=True)),
+                ('device_uid', models.CharField(default='233', max_length=100, unique=True)),
+                ('token', models.CharField(default='233', max_length=100, unique=True)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='devices', to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]

+ 27 - 0
account/migrations/0002_auto_20210908_2303.py

@@ -0,0 +1,27 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:03
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('folder', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('account', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='root_folder',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='root_folder', to='folder.folder'),
+        ),
+        migrations.AlterField(
+            model_name='profile',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL),
+        ),
+    ]

+ 21 - 0
account/migrations/0003_alter_profile_user.py

@@ -0,0 +1,21 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:06
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('account', '0002_auto_20210908_2303'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+    ]

+ 27 - 0
account/migrations/0004_auto_20210908_2313.py

@@ -0,0 +1,27 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:13
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('folder', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('account', '0003_alter_profile_user'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='root_folder',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='profile', to='folder.folder'),
+        ),
+        migrations.AlterField(
+            model_name='profile',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL),
+        ),
+    ]

+ 2 - 2
account/models.py

@@ -13,11 +13,11 @@ from django.dispatch import receiver
 # Create your views here.
 class Profile(models.Model):
     # 对应django自带的user
-    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
+    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='profile')
     # 邮箱
     email = models.CharField(max_length=20, blank=True)
     # 对应的根目录
-    root_folder = models.OneToOneField(Folder, on_delete=models.CASCADE, related_name='root_folder')
+    root_folder = models.ForeignKey(Folder, null=True, on_delete=models.DO_NOTHING, related_name='profile')
 
     def __str__(self):
         return 'user {}'.format(self.user.username)

+ 19 - 0
account/templates/create_group.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="zh-cn">
+    <div>
+        <form method="post" action=".">
+            {% csrf_token %}
+            <!-- 昵称 -->
+            <div>
+                <label for="username">昵称</label>
+                <input type="text" id="username" name="username">
+            </div>
+            <!-- 群名 -->
+            <div>
+                <label for="group_name">昵称</label>
+                <input type="text" id="group_name" name="group_name">
+            </div>
+            <button type="submit">提交</button>
+        </form>
+    </div>
+</html>

+ 16 - 2
account/views.py

@@ -1,9 +1,13 @@
+import string
+
 from django.shortcuts import render
+
+from folder.models import Folder
 from .form import UserLoginForm, UserRegisterForm
 from django.contrib.auth import authenticate, login, logout
 from django.http import HttpResponse
-from .models import Devices
-
+from .models import Devices, Profile
+from django.contrib.auth.models import User
 import random
 import datetime
 import json
@@ -110,6 +114,16 @@ def user_register(request):
             new_user.set_password(user_register_form.cleaned_data['password'])
             # 保存
             new_user.save()
+
+            user_id_random = ''.join(random.sample(string.ascii_letters + string.digits, 8))
+            folder_1 = Folder.objects.create(folder_id=user_id_random,
+                                             folder_name=request.user.username,
+                                             father_folder=None)
+            folder_1.save()
+            user_1 = Profile.objects.create(user=Profile.user.username,
+                                            email=Profile.email,
+                                            root_folder=folder_1)
+            user_1.save()
             return HttpResponse(status=200)
         else:
             return HttpResponse(status=400)

BIN=BIN
db.sqlite3


+ 7 - 0
file/admin.py

@@ -1,3 +1,10 @@
 from django.contrib import admin
+from .models import File
+
 
 # Register your models here.
+class FileAdmin(admin.ModelAdmin):
+    list_display = ["file_id", "file_name", "folder", "file_path", "update_time", "file_type", "file_size"]
+
+
+admin.site.register(File, FileAdmin)

+ 28 - 0
file/migrations/0001_initial.py

@@ -0,0 +1,28 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:01
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('folder', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='File',
+            fields=[
+                ('file_id', models.AutoField(primary_key=True, serialize=False)),
+                ('file_name', models.CharField(max_length=50)),
+                ('file_path', models.CharField(max_length=128)),
+                ('update_time', models.DateTimeField()),
+                ('file_type', models.CharField(max_length=32)),
+                ('file_size', models.CharField(max_length=16)),
+                ('folder', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='file_folder', to='folder.folder')),
+            ],
+        ),
+    ]

+ 7 - 2
file/views.py

@@ -1,9 +1,12 @@
+import random
+import string
+
 from django.shortcuts import render, redirect
 from django.contrib.auth.decorators import login_required
 from file.models import File
 from django.http import FileResponse, JsonResponse, HttpResponse
 from django.utils import timezone
-from judgement_function import judge_filepath, format_size
+from .judgement_function import judge_filepath, format_size
 from django.utils.http import urlquote
 from django.contrib.auth.models import User
 import json
@@ -23,6 +26,7 @@ DEBUG = 1
 @login_required
 def upload_file(request):
     if request.method == "POST":
+        data = request.POST
         file_obj = request.FILES.get('file')
         file_type = judge_filepath(file_obj.name.split('.')[-1].lower())
         file_folder = request.POST.get('file_path')
@@ -31,7 +35,8 @@ def upload_file(request):
         file_name = file_obj.name
         save_path = BASE_DIR + '/' + file_folder
         file_path = file_folder + '/' + file_name
-        File.objects.create(file_id=request.File.file_id,
+        file_id_1 = ''.join(random.sample(string.digits, 8))
+        File.objects.create(file_id=file_id_1,
                             file_name=file_name,
                             folder=file_folder,
                             file_path=file_path,

+ 7 - 0
folder/admin.py

@@ -1,3 +1,10 @@
 from django.contrib import admin
+from .models import Folder
+
 
 # Register your models here.
+class FolderAdmin(admin.ModelAdmin):
+    list_display = ["folder_id", "folder_name", "father_folder"]
+
+
+admin.site.register(Folder, FolderAdmin)

+ 23 - 0
folder/migrations/0001_initial.py

@@ -0,0 +1,23 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:01
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Folder',
+            fields=[
+                ('folder_id', models.AutoField(primary_key=True, serialize=False)),
+                ('folder_name', models.CharField(max_length=50)),
+                ('father_folder', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='the_father_folder', to='folder.folder')),
+            ],
+        ),
+    ]

+ 4 - 3
folder/models.py

@@ -2,15 +2,16 @@ from django.db import models
 
 
 # 文件夹表
+from django.db.models import SET_NULL
+
+
 class Folder(models.Model):
     # 文件夹id
     folder_id = models.AutoField(primary_key=True)
     # 文件夹名
     folder_name = models.CharField(max_length=50, blank=False)
     # 父节点
-    father_folder = models.ForeignKey('self', blank=True, on_delete=models.CASCADE, related_name='father_folder')
-
-
+    father_folder = models.ForeignKey('self', blank=True, on_delete=SET_NULL, null=True, related_name='the_father_folder')
 
     def __unicode__(self):
         return self.folder_id

+ 12 - 9
folder/views.py

@@ -1,7 +1,7 @@
 from django.http import HttpResponse
 from django.shortcuts import render
 from django.contrib.auth.decorators import login_required
-from models import Folder
+from .models import Folder
 from file.models import File
 from django.contrib.auth.models import User
 import json
@@ -14,9 +14,10 @@ DEBUG = 1
 @login_required(login_url='/account/login/')
 def folder_list(request):
     if request.method == 'POST':
+        data = request.POST
         # 获取所有文件夹
-        folders = Folder.objects.filter(father_folder=request.Folder).get()
-        files = File.objects.filter(folder=request.Folder).get()
+        folders = Folder.objects.filter(father_folder__folder_id=data['folder_id']).get()
+        files = File.objects.filter(folder__folder_id=data['folder_id']).get()
         response = []
         for i in folders:
             response.append(i)
@@ -33,14 +34,15 @@ def folder_list(request):
 # 增文件夹
 @login_required(login_url='/account/login/')
 def add_folder(request):
-    if request.method == 'post':
-        folder = Folder.objects.filter(father_folder__folder_id=request.Folder.folder_id).get()
+    if request.method == 'POST':
+        data = request.POST
+        folder = Folder.objects.filter(father_folder__folder_id=data['folder_id']).get()
         if not folder:
             # 查无此文件夹
             return HttpResponse(status=421)
         else:
-            Folder.objects.create(folder_id=request.Folder.folder_id,
-                                  folder_name=request.Folder.folder_name,
+            Folder.objects.create(folder_id=data['folder_id'],
+                                  folder_name=data['folder_name'],
                                   father_folder=folder)
             return HttpResponse(status=200)
     elif request.method == 'GET':
@@ -52,8 +54,9 @@ def add_folder(request):
 # 删除文件夹
 @login_required(login_url='/account/login/')
 def delete_folder(request):
-    if request.method == 'post':
-        folder = Folder.objects.filter(folder_id=request.Folder.folder_id).get()
+    if request.method == 'POST':
+        data = request.POST
+        folder = Folder.objects.filter(folder_id=data['folder_id']).get()
         if not folder:
             # 查无此文件夹
             return HttpResponse(status=421)

+ 7 - 0
group/admin.py

@@ -1,3 +1,10 @@
 from django.contrib import admin
+from .models import Group
+
 
 # Register your models here.
+class GroupAdmin(admin.ModelAdmin):
+    list_display = ["group_id", "group_name", "creator", "folder"]
+
+
+admin.site.register(Group, GroupAdmin)

+ 56 - 0
group/interface.md

@@ -0,0 +1,56 @@
+# 请求群列表
+******
+## 请求(POST)
+请求链接:group/group_list
+
+username(请求者的名字)
+## 返回值(http状态码+(列表))
+200+列表:成功+群组名称列表
+
+400:请求不合法
+
+# 请求进群
+******
+## 请求(POST)
+请求链接:group/add_group
+
+username(请求者的名字)
+group_id(群号)
+## 返回值(http状态码)
+421:此人已在群里
+
+200:请求成功,等待对方同意
+
+422:此人不存在
+
+400:请求不合法
+
+# 请求创建群聊
+******
+## 请求(POST)
+请求链接:group/create_group/
+
+username(请求者的名字)
+## 返回值(http状态码+列表)
+200:创建成功
+
+422:此人不存在
+
+400:请求不合法
+
+# 离开群聊
+******
+## 请求(POST)
+请求链接:group/leave_group
+
+username(请求者的名字)
+group_id(群号)
+## 返回值(http状态码)
+200:成功
+
+400:请求不合法
+
+421:此人不在群组里
+
+422:此人不存在
+

+ 28 - 0
group/migrations/0001_initial.py

@@ -0,0 +1,28 @@
+# Generated by Django 3.2.7 on 2021-09-08 15:01
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('folder', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Group',
+            fields=[
+                ('group_id', models.AutoField(primary_key=True, serialize=False)),
+                ('group_name', models.CharField(max_length=50)),
+                ('creator', models.CharField(max_length=50)),
+                ('folder', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='group_folder', to='folder.folder')),
+                ('member', models.ManyToManyField(to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]

+ 4 - 1
group/models.py

@@ -1,9 +1,12 @@
 from django.db import models
-from folder.models import Folder
+
 from django.contrib.auth.models import User
 
 
 # 群表
+from folder.models import Folder
+
+
 class Group(models.Model):
     # 群id
     group_id = models.AutoField(primary_key=True)

+ 1 - 0
group/urls.py

@@ -6,4 +6,5 @@ urlpatterns = [
     path('add_group/', views.add_group, name='add_group'),
     path('leave_group/', views.leave_group, name='leave_group'),
     path('group_list/', views.group_list, name='group_list'),
+    path('create_group/', views.create_group, name='create_group')
 ]

+ 32 - 36
group/views.py

@@ -1,7 +1,7 @@
 from django.http import HttpResponse
 from django.shortcuts import render
 from django.contrib.auth.decorators import login_required
-from models import Group
+from .models import Group
 from django.contrib.auth.models import User
 from folder.models import Folder
 import json
@@ -15,13 +15,14 @@ DEBUG = 1
 # 首先是 加入/退出 群组,客户端发送申请,把该用户直接 加入/删除 该群组的对象
 @login_required(login_url='/account/login/')
 def add_group(request):
-    if request.method == 'post':
+    if request.method == 'POST':
+        data = request.POST
         # 查找是否有此人
-        user = User.objects.filter(username=request.user.username).get()
+        user = User.objects.filter(username=data['username']).get()
         if user:
             # 查找此人是否已经在群组里
-            group = Group.objects.filter(group_id=request.Group.group_id).get()
-            if user in group.member:
+            group = Group.objects.filter(group_id=data['group_id']).get()
+            if group.member.filter(username=user.username).count() > 0:
                 # 此人已在群组里
                 return HttpResponse(status=421)
             else:
@@ -39,35 +40,28 @@ def add_group(request):
 
 @login_required(login_url='/account/login/')
 def create_group(request):
-    if request.method == 'post':
+    if request.method == 'POST':
+        data = request.POST
         # 查找是否有此人
-        user = User.objects.filter(username=request.user.username).get()
+        user = User.objects.filter(username=request.user.username)
         if user:
-            # 查找此群是否有人注册
-            group = Group.objects.filter(group_id=request.Group.group_id).get()
-            if group:
-                # 此群有人注册
-                return HttpResponse(status=421)
-            else:
-                group_id_random = ''.join(random.sample(string.ascii_letters + string.digits, 8))
-                while Group.objects.filter(group_id=group_id_random) is not None:
-                    group_id_random = ''.join(random.sample(string.ascii_letters + string.digits, 8))
-                folder_1 = Folder.objects.create(folder_id=group_id_random,
-                                                 folder_name=request.Group.group_name,
-                                                 father_folder=None)
-                folder_1.save()
-                group_1 = Group.objects.create(group_id=group_id_random,
-                                               group_name=request.Group.group_name,
-                                               creator=request.user.username,
-                                               folder=folder_1,
-                                               member=user)
-                group_1.save()
-                return HttpResponse(status=200)
+            group_id_random = ''.join(random.sample(string.digits, 8))
+            folder_1 = Folder.objects.create(folder_id=group_id_random,
+                                             folder_name=data['group_name'],
+                                             father_folder=None)
+            folder_1.save()
+            group_1 = Group.objects.create(group_id=group_id_random,
+                                           group_name=data['group_name'],
+                                           creator=request.user.username,
+                                           folder=folder_1,)
+            group_1.member.set(user)
+            group_1.save()
+            return HttpResponse(status=200)
         else:
             return HttpResponse(status=422)
     elif request.method == 'GET':
         if DEBUG:
-            return render(request, 'add_group.html')
+            return render(request, 'create_group.html')
     else:
         return HttpResponse(status=400)
 
@@ -76,17 +70,18 @@ def create_group(request):
 
 @login_required(login_url='/account/login/')
 def leave_group(request):
-    if request.method == 'post':
+    if request.method == 'POST':
+        data = request.POST
         # 查找是否有此人
-        user = User.objects.filter(username=request.user.username).get()
+        user = User.objects.filter(username=data['username']).get()
         if user:
             # 查找此人是否已经在群组里
-            group = Group.objects.filter(group_id=request.Group.group_id).get()
-            if user in group.member:
-                # 此人在群组里
+            group = Group.objects.filter(group_id=data['group_id']).get()
+            if group.member.filter(username=user.username).count() == 0:
+                # 此人在群组里
                 return HttpResponse(status=421)
             else:
-                group.member.delete(user)
+                group.member.remove(user)
                 group.save()
                 return HttpResponse(status=200)
         else:
@@ -102,11 +97,12 @@ def leave_group(request):
 @login_required(login_url='/account/login/')
 def group_list(request):
     if request.method == 'POST':
+        data = request.POST
         # 获取群组
-        groups = Group.objects.filter(member__username=request.user.username)
+        groups = Group.objects.filter(member__username=data['username'])
         response = []
         for i in groups:
-            response.append(i)
+            response.append(i.group_name)
         return HttpResponse(json.dumps(response), status=200)
     elif request.method == 'GET':
         if DEBUG:

+ 4 - 7
st_cloud/settings.py

@@ -38,15 +38,12 @@ INSTALLED_APPS = [
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'rest_framework',
+    'group',
+    'folder',
+    'file',
+    'account',
 ]
 
-# 设置权限策略:
-REST_FRAMEWORK = {
-    'DEFAULT_PERMISSION_CLASSES': [
-        'rest_framework.permissions.IsAdminUser',
-    ],
-    'PAGE_SIZE': 10
-}
 
 MIDDLEWARE = [
     'django.middleware.security.SecurityMiddleware',

+ 5 - 1
st_cloud/urls.py

@@ -14,8 +14,12 @@ Including another URLconf
     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
 """
 from django.contrib import admin
-from django.urls import path
+from django.urls import path, include
 
 urlpatterns = [
     path('admin/', admin.site.urls),
+    path('group/', include(('group.urls', "group"), namespace='group')),
+    path('folder/', include(('folder.urls', "folder"), namespace='folder')),
+    path('file/', include(('file.urls', "file"), namespace='file')),
+    path('account/', include(('account.urls', "account"), namespace='account')),
 ]

+ 1 - 10
templates/add_group.html

@@ -13,16 +13,7 @@
                 <label for="group_id">群号</label>
                 <input type="text" id="group_id" name="group_id">
             </div>
-            <!-- 密码 -->
-            <div>
-                <label for="password">设置密码</label>
-                <input type="password" id="password" name="password" required>
-            </div>
-            <!-- 确认密码 -->
-            <div>
-                <label for="password2">确认密码</label>
-                <input type="password" id="password2" name="password2" required>
-            </div>
+
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>

+ 1 - 15
templates/group_list.html

@@ -8,21 +8,7 @@
                 <label for="username">昵称</label>
                 <input type="text" id="username" name="username">
             </div>
-            <!-- 邮箱 -->
-            <div>
-                <label for="email">邮箱</label>
-                <input type="text" id="email" name="email">
-            </div>
-            <!-- 密码 -->
-            <div>
-                <label for="password">设置密码</label>
-                <input type="password" id="password" name="password" required>
-            </div>
-            <!-- 确认密码 -->
-            <div>
-                <label for="password2">确认密码</label>
-                <input type="password" id="password2" name="password2" required>
-            </div>
+
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>

+ 5 - 14
templates/leave_group.html

@@ -5,24 +5,15 @@
             {% csrf_token %}
             <!-- 昵称 -->
             <div>
-                <label for="username">称</label>
+                <label for="username">称</label>
                 <input type="text" id="username" name="username">
             </div>
-            <!-- 邮箱 -->
+            <!-- 群号 -->
             <div>
-                <label for="email">邮箱</label>
-                <input type="text" id="email" name="email">
-            </div>
-            <!-- 密码 -->
-            <div>
-                <label for="password">设置密码</label>
-                <input type="password" id="password" name="password" required>
-            </div>
-            <!-- 确认密码 -->
-            <div>
-                <label for="password2">确认密码</label>
-                <input type="password" id="password2" name="password2" required>
+                <label for="group_id">群号</label>
+                <input type="text" id="group_id" name="group_id">
             </div>
+
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>