mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 00:13:18 +00:00
update
This commit is contained in:
parent
29f75a011b
commit
aad46b67cc
@ -48,7 +48,7 @@ class admin_role_required(BasePermissionDecorator):
|
|||||||
|
|
||||||
class problem_permission_required(admin_role_required):
|
class problem_permission_required(admin_role_required):
|
||||||
def check_permission(self):
|
def check_permission(self):
|
||||||
if not super(problem_permission_required, self).check_permission():
|
if not super().check_permission():
|
||||||
return False
|
return False
|
||||||
if self.request.user.problem_permission == ProblemPermission.NONE:
|
if self.request.user.problem_permission == ProblemPermission.NONE:
|
||||||
return False
|
return False
|
||||||
|
0
group/__init__.py
Normal file
0
group/__init__.py
Normal file
33
group/migrations/0001_initial.py
Normal file
33
group/migrations/0001_initial.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.3 on 2018-05-04 02:10
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Group',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.TextField()),
|
||||||
|
('description', models.TextField()),
|
||||||
|
('create_time', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='my_groups', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('members', models.ManyToManyField(to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'db_table': 'group',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
0
group/migrations/__init__.py
Normal file
0
group/migrations/__init__.py
Normal file
13
group/models.py
Normal file
13
group/models.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from django.db import models
|
||||||
|
from account.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class Group(models.Model):
|
||||||
|
name = models.TextField()
|
||||||
|
description = models.TextField()
|
||||||
|
create_time = models.DateTimeField(auto_now_add=True)
|
||||||
|
created_by = models.ForeignKey(User, related_name="my_groups")
|
||||||
|
members = models.ManyToManyField(User)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "group"
|
12
group/serializers.py
Normal file
12
group/serializers.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from utils.api import serializers
|
||||||
|
from utils.api._serializers import UsernameSerializer
|
||||||
|
|
||||||
|
from .models import Group
|
||||||
|
|
||||||
|
|
||||||
|
class GroupSerializer(serializers.ModelSerializer):
|
||||||
|
created_by = UsernameSerializer()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Group
|
||||||
|
fields = "__all__"
|
0
group/tests.py
Normal file
0
group/tests.py
Normal file
0
group/urls/__init__.py
Normal file
0
group/urls/__init__.py
Normal file
7
group/urls/admin.py
Normal file
7
group/urls/admin.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
from ..views.admin import GroupAPI
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(r"^group/?$", GroupAPI.as_view(), name="group_api"),
|
||||||
|
]
|
0
group/views/__init__.py
Normal file
0
group/views/__init__.py
Normal file
35
group/views/admin.py
Normal file
35
group/views/admin.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
from account.decorators import admin_role_required, ensure_created_by
|
||||||
|
from utils.api import APIView, validate_serializer
|
||||||
|
|
||||||
|
from ..models import Group
|
||||||
|
from ..serializers import GroupSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class GroupAPI(APIView):
|
||||||
|
@admin_role_required
|
||||||
|
def get(self, request):
|
||||||
|
_id = request.GET.get("id")
|
||||||
|
keyword = request.GET.get("keyword")
|
||||||
|
user = request.user
|
||||||
|
if _id:
|
||||||
|
try:
|
||||||
|
group = Group.objects.get(id=_id)
|
||||||
|
ensure_created_by(group, user)
|
||||||
|
return self.success(GroupSerializer(group).data)
|
||||||
|
except Group.DoesNotExist:
|
||||||
|
return self.error("Group does not exist")
|
||||||
|
groups = Group.objects.all().order_by("-create_time")
|
||||||
|
if not user.is_super_admin():
|
||||||
|
groups = groups.filter(created_by=user)
|
||||||
|
if keyword:
|
||||||
|
groups = groups.filter(name__contains=keyword)
|
||||||
|
return self.success(self.paginate_data(request, groups, GroupSerializer))
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def put(self, request):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def delete(self, request):
|
||||||
|
pass
|
@ -14,4 +14,5 @@ urlpatterns = [
|
|||||||
url(r"^api/", include("submission.urls.oj")),
|
url(r"^api/", include("submission.urls.oj")),
|
||||||
url(r"^api/admin/", include("submission.urls.admin")),
|
url(r"^api/admin/", include("submission.urls.admin")),
|
||||||
url(r"^api/admin/", include("utils.urls")),
|
url(r"^api/admin/", include("utils.urls")),
|
||||||
|
url(r"^api/admin/", include("group.urls.admin"))
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user