diff --git a/account/views.py b/account/views.py index 5d914344..74e740fe 100644 --- a/account/views.py +++ b/account/views.py @@ -1,4 +1,5 @@ # coding=utf-8 +import os import codecs import qrcode import StringIO @@ -494,4 +495,21 @@ def user_rank_page(request, page=1): return render(request, "utils/rank.html", {"ranks": ranks, "page": page, "previous_page": previous_page, "next_page": next_page, - "start_id": int(page) * 20 - 20,}) \ No newline at end of file + "start_id": int(page) * 20 - 20,}) + + +class AvatarUploadAPIView(APIView): + def post(self, request): + if "file" not in request.FILES: + return error_response(u"文件上传失败") + + f = request.FILES["file"] + if f.size > 1024 * 1024: + return error_response(u"图片过大") + if os.path.splitext(f.name)[-1].lower() not in [".gif", ".jpg", ".jpeg", ".bmp", ".png"]: + return error_response(u"需要上传图片格式") + name = "avatar_" + rand_str(5) + os.path.splitext(f.name)[-1] + with open(os.path.join(settings.IMAGE_UPLOAD_DIR, name), "wb") as img: + for chunk in request.FILES["file"]: + img.write(chunk) + return success_response({"path": "/static/upload/" + name}) diff --git a/oj/urls.py b/oj/urls.py index 171ebd06..2a802e0a 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -7,7 +7,7 @@ from account.views import (UserLoginAPIView, UsernameCheckAPIView, UserRegisterA UserChangePasswordAPIView, EmailCheckAPIView, UserAdminAPIView, UserInfoAPIView, ResetPasswordAPIView, ApplyResetPasswordAPIView, SSOAPIView, UserProfileAPIView, - TwoFactorAuthAPIView) + TwoFactorAuthAPIView, AvatarUploadAPIView) from announcement.views import AnnouncementAdminAPIView @@ -141,6 +141,7 @@ urlpatterns = [ url(r'^two_factor_auth/$', TemplateView.as_view(template_name="oj/account/two_factor_auth.html"), name="two_factor_auth_page"), url(r'^rank/(?P\d+)/$', "account.views.user_rank_page", name="user_rank_page"), url(r'^rank/$', "account.views.user_rank_page", name="user_rank_page"), + url(r'^api/avatar/upload/', AvatarUploadAPIView.as_view(), name="avatar_upload_api"), ] diff --git a/static/src/css/global.css b/static/src/css/global.css index 1d3bda37..a1de7b2e 100644 --- a/static/src/css/global.css +++ b/static/src/css/global.css @@ -63,7 +63,7 @@ pre, code { background-color: white; } -#index-avatar{ +.big-avatar{ height: 200px; width: 200px; } diff --git a/static/src/js/app/oj/account/avatar.js b/static/src/js/app/oj/account/avatar.js index 3673904f..ec0c0541 100644 --- a/static/src/js/app/oj/account/avatar.js +++ b/static/src/js/app/oj/account/avatar.js @@ -1,20 +1,26 @@ require(["jquery", "bsAlert", "csrfToken", "uploader"], function ($, bsAlert, csrfTokenHeader, uploader) { var avatar = ""; - var avatarUploader = uploader("#avatarUploader", "/", + var avatarUploader = uploader("#avatarUploader", "/api/avatar/upload/", {title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*'}, function (file, response) { - //todo + if (response.code) { + bsAlert(response.data); + } + else { + avatar = response.data.path; + $('#current-avatar').attr('src', avatar); + } }); function changeAvatar(event) { avatar = $(event.target).attr('src'); - $('#current_avatar').attr('src', avatar); + $('#current-avatar').attr('src', avatar); } $('.avatar-item').click(changeAvatar); - $('#save_avatar').click(function () { + $('#save-avatar').click(function () { if (avatar) $.ajax({ beforeSend: csrfTokenHeader, diff --git a/template/src/oj/account/avatar.html b/template/src/oj/account/avatar.html index 6b044603..c4032a58 100644 --- a/template/src/oj/account/avatar.html +++ b/template/src/oj/account/avatar.html @@ -15,9 +15,11 @@
- +
+
+ +

选择已有头像

@@ -43,10 +45,6 @@

上传自定义头像

选择头像
-
- -
- {% endblock %} diff --git a/template/src/oj/account/change_password.html b/template/src/oj/account/change_password.html index 25faf1d8..4edc0b1c 100644 --- a/template/src/oj/account/change_password.html +++ b/template/src/oj/account/change_password.html @@ -15,8 +15,7 @@
- +
diff --git a/template/src/oj/account/settings.html b/template/src/oj/account/settings.html index faee8aad..678c9eab 100644 --- a/template/src/oj/account/settings.html +++ b/template/src/oj/account/settings.html @@ -15,7 +15,7 @@
- +
diff --git a/template/src/oj/account/user_index.html b/template/src/oj/account/user_index.html index 6d34593d..9bf4edd4 100644 --- a/template/src/oj/account/user_index.html +++ b/template/src/oj/account/user_index.html @@ -6,7 +6,7 @@
- +

diff --git a/utils/views.py b/utils/views.py index 1b73eb02..7f25c4b4 100644 --- a/utils/views.py +++ b/utils/views.py @@ -9,6 +9,7 @@ import logging logger = logging.getLogger("app_info") + class SimditorImageUploadAPIView(APIView): def post(self, request): if "image" not in request.FILES: