大幅优化数据库查询, 升级django至1.11 LTS, 升级python至3.6.2
This commit is contained in:
@@ -76,7 +76,7 @@ def check_contest_permission(func):
|
||||
|
||||
try:
|
||||
# use self.contest to avoid query contest again in view.
|
||||
self.contest = Contest.objects.get(id=contest_id, visible=True)
|
||||
self.contest = Contest.objects.select_related("created_by").get(id=contest_id, visible=True)
|
||||
except Contest.DoesNotExist:
|
||||
return self.error("Contest %s doesn't exist" % contest_id)
|
||||
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import time
|
||||
|
||||
import pytz
|
||||
|
||||
from django.contrib import auth
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.db import connection
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
|
||||
from utils.api import JSONResponse
|
||||
|
||||
|
||||
class SessionSecurityMiddleware(object):
|
||||
class SessionSecurityMiddleware(MiddlewareMixin):
|
||||
def process_request(self, request):
|
||||
if request.user.is_authenticated() and request.user.is_admin_role():
|
||||
if "last_activity" in request.session:
|
||||
@@ -20,15 +22,27 @@ class SessionSecurityMiddleware(object):
|
||||
request.session["last_activity"] = time.time()
|
||||
|
||||
|
||||
class AdminRoleRequiredMiddleware(object):
|
||||
class AdminRoleRequiredMiddleware(MiddlewareMixin):
|
||||
def process_request(self, request):
|
||||
path = request.path_info
|
||||
if path.startswith("/admin/") or path.startswith("/api/admin/"):
|
||||
if not(request.user.is_authenticated() and request.user.is_admin_role()):
|
||||
if not (request.user.is_authenticated() and request.user.is_admin_role()):
|
||||
return JSONResponse.response({"error": "login-required", "data": _("Please login in first")})
|
||||
|
||||
|
||||
class TimezoneMiddleware(object):
|
||||
class TimezoneMiddleware(MiddlewareMixin):
|
||||
def process_request(self, request):
|
||||
if request.user.is_authenticated():
|
||||
timezone.activate(pytz.timezone(request.user.userprofile.time_zone))
|
||||
|
||||
|
||||
class LogSqlMiddleware(MiddlewareMixin):
|
||||
def process_response(self, request, response):
|
||||
print("\033[94m", "#" * 30, "\033[0m")
|
||||
time_threshold = 0.03
|
||||
for query in connection.queries:
|
||||
if float(query["time"]) > time_threshold:
|
||||
print("\033[93m", query, "\n", "-" * 30, "\033[0m")
|
||||
else:
|
||||
print(query, "\n", "-" * 30)
|
||||
return response
|
||||
|
||||
@@ -47,7 +47,7 @@ class UserProfileAPI(APIView):
|
||||
user = request.user
|
||||
except User.DoesNotExist:
|
||||
return self.error("User does not exist")
|
||||
profile = UserProfile.objects.get(user=user)
|
||||
profile = UserProfile.objects.select_related("user").get(user=user)
|
||||
return self.success(UserProfileSerializer(profile).data)
|
||||
|
||||
@validate_serializer(EditUserProfileSerializer)
|
||||
|
||||
Reference in New Issue
Block a user