ignalxy 4 gadi atpakaļ
vecāks
revīzija
5b620f2db9

BIN
176797719_p0.jpg


+ 9 - 3
account/decorators.py

@@ -25,15 +25,21 @@ def login_required(function=None, error='error'):
     to the log-in page if necessary.
     """
     def is_login(request):
-        username = request.data.get('username', '')
-        token = request.data.get('token', '')
+        if request.method != 'POST':
+            return True
+        username = request.POST.get('username', '')
+        token = request.POST.get('token', '')
+        print(f'username={username} token={token}')
         try:
-            user = User.objects.get(username='username')
+            user = User.objects.get(username=username)
             if user.check_token(token):
                 user.tokens.get(token=token)
+                print('已登录')
                 return True
         except:
+            print('未登录')
             return False
+        print('未登录')
         return False
 
     actual_decorator = user_passes_test(is_login, '请登录')

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

@@ -0,0 +1,48 @@
+# Generated by Django 3.2.5 on 2021-09-09 07:30
+
+import account.validators
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('folder', '0002_alter_folder_folder_name'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='User',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('username', models.CharField(error_messages={'unique': 'A _user with that username already exists.'}, help_text='Required. 25 characters or fewer. Letters, digits and _ only.', max_length=25, unique=True, validators=[account.validators.ASCIIUsernameValidator()], verbose_name='username')),
+                ('password', models.CharField(max_length=128, verbose_name='password')),
+                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
+                ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
+            ],
+            options={
+                'verbose_name': '用户信息表',
+                'verbose_name_plural': '用户信息表',
+                'db_table': '_user',
+            },
+        ),
+        migrations.CreateModel(
+            name='Profile',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('root_folder', models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='profile', to='folder.folder')),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to='account.user')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='LoginToken',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('token', models.CharField(max_length=256)),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tokens', to='account.user')),
+            ],
+        ),
+    ]

+ 0 - 0
account/migrations/__init__.py


+ 14 - 0
account/views.py

@@ -6,6 +6,7 @@ from datetime import datetime, time
 from .models import User, LoginToken
 from django.http import JsonResponse, HttpResponse
 from rest_framework.decorators import api_view
+from .decorators import login_required
 
 
 def auth_with_username_or_email(username, password):
@@ -16,6 +17,19 @@ def auth_with_username_or_email(username, password):
     return user
 
 
+def get_user(request):
+    username = request.data.get('username', '')
+    token = request.data.get('token', '')
+    try:
+        user = User.objects.get(username=username)
+        if user.check_token(token):
+            user.tokens.get(token=token)
+            return user
+    except:
+        return None
+    return None
+
+
 @api_view(['POST'])
 def register(request):
     username = request.data.get('username', '')

BIN
db.sqlite3


+ 25 - 21
file/views.py

@@ -2,7 +2,7 @@ import random
 import string
 
 from django.shortcuts import render, redirect
-from django.contrib.auth.decorators import login_required
+from account.decorators import login_required
 from file.models import File
 from django.http import FileResponse, JsonResponse, HttpResponse
 from django.utils import timezone
@@ -28,26 +28,30 @@ DEBUG = 1
 @login_required
 def upload_file(request):
     if request.method == "POST":
-        file_obj = request.FILES.get('upload')
-        file_type = judge_filepath(file_obj.name.split('.')[-1].lower())
-        file_folder = request.POST.get('file_path')
-        update_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
-        file_size = format_size(file_obj.size)
-        file_name = file_obj.name
-        save_path = BASE_DIR + '/' + file_folder
-        file_path = file_folder + file_name
-        file_id_1 = ''.join(random.sample(string.digits, 8))
-        File.objects.create(file_id=file_id_1,
-                            file_name=file_name,
-                            folder=Folder.objects.filter(folder_id=request.POST.get('folder_id')).get(),
-                            file_path=file_path,
-                            update_time=update_time,
-                            file_size=file_size,
-                            file_type=file_type)
-        with open(save_path + file_name, 'wb+') as f:
-            for chunk in file_obj.chunks():
-                f.write(chunk)
-        return HttpResponse(status=200)
+        try:
+            file_obj = request.FILES.get('upload')
+            file_type = judge_filepath(file_obj.name.split('.')[-1].lower())
+            file_folder = request.POST.get('file_path')
+            update_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
+            file_size = format_size(file_obj.size)
+            file_name = file_obj.name
+            save_path = BASE_DIR + '/' + file_folder
+            file_path = file_folder + file_name
+            file_id_1 = ''.join(random.sample(string.digits, 8))
+            File.objects.create(file_id=file_id_1,
+                                file_name=file_name,
+                                folder=Folder.objects.filter(folder_id=request.POST.get('folder_id')).get(),
+                                file_path=file_path,
+                                update_time=update_time,
+                                file_size=file_size,
+                                file_type=file_type)
+            with open(save_path + file_name, 'wb+') as f:
+                for chunk in file_obj.chunks():
+                    f.write(chunk)
+            return HttpResponse(status=200)
+        except Exception as e:
+            print(e)
+            return HttpResponse(status=401)
     elif request.method == 'GET':
         if DEBUG:
             return render(request, 'upload_file.html')

+ 18 - 0
folder/migrations/0002_alter_folder_folder_name.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.5 on 2021-09-09 07:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('folder', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='folder',
+            name='folder_name',
+            field=models.CharField(default='root', max_length=50),
+        ),
+    ]

+ 5 - 6
folder/views.py

@@ -3,17 +3,16 @@ import string
 
 from django.http import HttpResponse
 from django.shortcuts import render
-from django.contrib.auth.decorators import login_required
+from account.decorators import login_required
 from .models import Folder
 from file.models import File
-from django.contrib.auth.models import User
 import json
 
 # Create your views here.
 DEBUG = 1
 
 
-@login_required(login_url='/account/login/')
+@login_required
 def get_first_folder(request):
     if request.method == 'POST':
         # 获取所有根文件夹id
@@ -30,7 +29,7 @@ def get_first_folder(request):
 
 
 # 在根目录下列出所有文件夹与文件
-@login_required(login_url='/account/login/')
+@login_required
 def folder_list(request):
     if request.method == 'POST':
         data = request.POST
@@ -52,7 +51,7 @@ def folder_list(request):
 
 # 父文件夹id 子文件夹名字
 # 增文件夹
-@login_required(login_url='/account/login/')
+@login_required
 def add_folder(request):
     if request.method == 'POST':
         data = request.POST
@@ -77,7 +76,7 @@ def add_folder(request):
 
 
 # 删除文件夹
-@login_required(login_url='/account/login/')
+@login_required
 def delete_folder(request):
     if request.method == 'POST':
         data = request.POST

+ 19 - 0
group/migrations/0002_alter_group_member.py

@@ -0,0 +1,19 @@
+# Generated by Django 3.2.5 on 2021-09-09 07:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0001_initial'),
+        ('group', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='group',
+            name='member',
+            field=models.ManyToManyField(to='account.User'),
+        ),
+    ]

+ 9 - 8
group/views.py

@@ -1,8 +1,8 @@
 from django.http import HttpResponse
 from django.shortcuts import render
-from django.contrib.auth.decorators import login_required
+from account.decorators import login_required
 from .models import Group
-from django.contrib.auth.models import User
+from account.models import User
 from folder.models import Folder
 import json
 import random
@@ -13,7 +13,7 @@ DEBUG = 1
 
 
 # 首先是 加入/退出 群组,客户端发送申请,把该用户直接 加入/删除 该群组的对象
-@login_required(login_url='/account/login/')
+@login_required
 def add_group(request):
     if request.method == 'POST':
         data = request.POST
@@ -38,12 +38,13 @@ def add_group(request):
         return HttpResponse(status=400)
 
 
-@login_required(login_url='/account/login/')
+@login_required
 def create_group(request):
     if request.method == 'POST':
         data = request.POST
         # 查找是否有此人
-        user = User.objects.filter(username=request.user.username)
+        username = data.get('username', '')
+        user = User.objects.filter(username=username)
         if user:
             group_id_random = ''.join(random.sample(string.digits, 8))
             folder_1 = Folder.objects.create(folder_id=group_id_random,
@@ -52,7 +53,7 @@ def create_group(request):
             folder_1.save()
             group_1 = Group.objects.create(group_id=group_id_random,
                                            group_name=data['group_name'],
-                                           creator=request.user.username,
+                                           creator=username,
                                            folder=folder_1,)
             group_1.member.set(user)
             group_1.save()
@@ -68,7 +69,7 @@ def create_group(request):
 
 # value = ''.join(random.sample(string.ascii_letters + string.digits, 8))
 
-@login_required(login_url='/account/login/')
+@login_required
 def leave_group(request):
     if request.method == 'POST':
         data = request.POST
@@ -94,7 +95,7 @@ def leave_group(request):
 
 
 # 获取你所在的所有群组
-@login_required(login_url='/account/login/')
+@login_required
 def group_list(request):
     if request.method == 'POST':
         data = request.POST

+ 9 - 0
templates/add_folder.html

@@ -3,6 +3,11 @@
     <div>
         <form method="post" action=".">
             {% csrf_token %}
+            <!-- 用户名 -->
+            <div>
+                <label for="username">用户名</label>
+                <input type="text" id="username" name="username">
+            </div>
             <!-- 文件夹名 -->
             <div>
                 <label for="folder_name">文件夹名</label>
@@ -13,6 +18,10 @@
                 <label for="father_folder_id">父文件夹id</label>
                 <input type="text" id="father_folder_id" name="father_folder_id">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>

+ 4 - 0
templates/add_group.html

@@ -13,6 +13,10 @@
                 <label for="group_id">群号</label>
                 <input type="text" id="group_id" name="group_id">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
 
             <!-- 提交按钮 -->
             <button type="submit">提交</button>

+ 23 - 0
templates/create_group.html

@@ -0,0 +1,23 @@
+<!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>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
+            <button type="submit">提交</button>
+        </form>
+    </div>
+</html>

+ 4 - 0
templates/delete_file.html

@@ -13,6 +13,10 @@
                 <label for="file_id">file_id</label>
                 <input type="text" id="file_id" name="file_id">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>

+ 4 - 0
templates/delete_folder.html

@@ -8,6 +8,10 @@
                 <label for="folder_id">id</label>
                 <input type="text" id="folder_id" name="folder_id">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
 
             <!-- 提交按钮 -->
             <button type="submit">提交</button>

+ 4 - 0
templates/download_file.html

@@ -8,6 +8,10 @@
                 <label for="file_path">file_path</label>
                 <input type="text" id="file_path" name="file_path">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
 
             <!-- 提交按钮 -->
             <button type="submit">提交</button>

+ 4 - 0
templates/folder_list.html

@@ -4,6 +4,10 @@
         <form method="post" action=".">
             {% csrf_token %}
 
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
 
             <!-- 提交按钮 -->
             <button type="submit">提交</button>

+ 4 - 0
templates/group_list.html

@@ -8,6 +8,10 @@
                 <label for="username">昵称</label>
                 <input type="text" id="username" name="username">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
 
             <!-- 提交按钮 -->
             <button type="submit">提交</button>

+ 4 - 1
templates/leave_group.html

@@ -13,7 +13,10 @@
                 <label for="group_id">群号</label>
                 <input type="text" id="group_id" name="group_id">
             </div>
-
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
             <!-- 提交按钮 -->
             <button type="submit">提交</button>
         </form>

+ 9 - 0
templates/upload_file.html

@@ -3,6 +3,11 @@
     <div>
         <form method="post" enctype="multipart/form-data" action=".">
             {% csrf_token %}
+            <!-- 用户名 -->
+            <div>
+                <label for="username">用户名</label>
+                <input type="text" id="username" name="username">
+            </div>
             <!-- 昵称 -->
             <div>
                 <label for="file_path">file_path</label>
@@ -16,6 +21,10 @@
             <div>
                 <input type="file" name="upload">
             </div>
+            <div>
+                <label for="token">token</label>
+                <input type="text" id="token" name="token">
+            </div>
             <!-- 提交按钮 -->
             <button type="submit" class="btn btn-success btn-block">提交</button>
         </form>