mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-01-04 03:22:06 +00:00
完成上传自定义头像的功能
This commit is contained in:
parent
be49cf941a
commit
c61dea63af
@ -1,4 +1,5 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
|
import os
|
||||||
import codecs
|
import codecs
|
||||||
import qrcode
|
import qrcode
|
||||||
import StringIO
|
import StringIO
|
||||||
@ -495,3 +496,20 @@ def user_rank_page(request, page=1):
|
|||||||
"previous_page": previous_page,
|
"previous_page": previous_page,
|
||||||
"next_page": next_page,
|
"next_page": next_page,
|
||||||
"start_id": int(page) * 20 - 20,})
|
"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})
|
||||||
|
@ -7,7 +7,7 @@ from account.views import (UserLoginAPIView, UsernameCheckAPIView, UserRegisterA
|
|||||||
UserChangePasswordAPIView, EmailCheckAPIView,
|
UserChangePasswordAPIView, EmailCheckAPIView,
|
||||||
UserAdminAPIView, UserInfoAPIView, ResetPasswordAPIView,
|
UserAdminAPIView, UserInfoAPIView, ResetPasswordAPIView,
|
||||||
ApplyResetPasswordAPIView, SSOAPIView, UserProfileAPIView,
|
ApplyResetPasswordAPIView, SSOAPIView, UserProfileAPIView,
|
||||||
TwoFactorAuthAPIView)
|
TwoFactorAuthAPIView, AvatarUploadAPIView)
|
||||||
|
|
||||||
from announcement.views import AnnouncementAdminAPIView
|
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'^two_factor_auth/$', TemplateView.as_view(template_name="oj/account/two_factor_auth.html"), name="two_factor_auth_page"),
|
||||||
url(r'^rank/(?P<page>\d+)/$', "account.views.user_rank_page", name="user_rank_page"),
|
url(r'^rank/(?P<page>\d+)/$', "account.views.user_rank_page", name="user_rank_page"),
|
||||||
url(r'^rank/$', "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"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ pre, code {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
#index-avatar{
|
.big-avatar{
|
||||||
height: 200px;
|
height: 200px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,26 @@
|
|||||||
require(["jquery", "bsAlert", "csrfToken", "uploader"], function ($, bsAlert, csrfTokenHeader, uploader) {
|
require(["jquery", "bsAlert", "csrfToken", "uploader"], function ($, bsAlert, csrfTokenHeader, uploader) {
|
||||||
var avatar = "";
|
var avatar = "";
|
||||||
var avatarUploader = uploader("#avatarUploader", "/",
|
var avatarUploader = uploader("#avatarUploader", "/api/avatar/upload/",
|
||||||
{title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*'},
|
{title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*'},
|
||||||
function (file, response) {
|
function (file, response) {
|
||||||
//todo
|
if (response.code) {
|
||||||
|
bsAlert(response.data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
avatar = response.data.path;
|
||||||
|
$('#current-avatar').attr('src', avatar);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function changeAvatar(event) {
|
function changeAvatar(event) {
|
||||||
avatar = $(event.target).attr('src');
|
avatar = $(event.target).attr('src');
|
||||||
$('#current_avatar').attr('src', avatar);
|
$('#current-avatar').attr('src', avatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.avatar-item').click(changeAvatar);
|
$('.avatar-item').click(changeAvatar);
|
||||||
|
|
||||||
$('#save_avatar').click(function () {
|
$('#save-avatar').click(function () {
|
||||||
if (avatar)
|
if (avatar)
|
||||||
$.ajax({
|
$.ajax({
|
||||||
beforeSend: csrfTokenHeader,
|
beforeSend: csrfTokenHeader,
|
||||||
|
@ -15,9 +15,11 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<img src="{{ user.userprofile.avatar }}" class="img-responsive"
|
<img src="{{ user.userprofile.avatar }}" class="img-responsive big-avatar" id="current-avatar">
|
||||||
style="height: 200px;width: 200px;" id="current_avatar">
|
|
||||||
<br>
|
<br>
|
||||||
|
<div class="form-group left">
|
||||||
|
<button id="save-avatar" type="submit" class="btn btn-primary">保存</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<h3>选择已有头像</h3>
|
<h3>选择已有头像</h3>
|
||||||
@ -43,10 +45,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<h3>上传自定义头像</h3>
|
<h3>上传自定义头像</h3>
|
||||||
<div id="avatarUploader">选择头像</div>
|
<div id="avatarUploader">选择头像</div>
|
||||||
<div class="form-group left">
|
|
||||||
<button id="save_avatar" type="submit" class="btn btn-primary">保存</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<img src="{{ user.userprofile.avatar }}" class="img-responsive"
|
<img src="{{ user.userprofile.avatar }}" class="img-responsive big-avatar">
|
||||||
style="height: 200px;width: 200px;">
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<form id="change_password-form">
|
<form id="change_password-form">
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<img src="{{ user.userprofile.avatar }}" class="img-responsive index-avatar">
|
<img src="{{ user.userprofile.avatar }}" class="img-responsive big-avatar">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<form>
|
<form>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<div class="container main">
|
<div class="container main">
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<img src="{{ user.userprofile.avatar }}" class="img-responsive" id="index-avatar">
|
<img src="{{ user.userprofile.avatar }}" class="img-responsive big-avatar">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h2>
|
<h2>
|
||||||
|
@ -9,6 +9,7 @@ import logging
|
|||||||
|
|
||||||
logger = logging.getLogger("app_info")
|
logger = logging.getLogger("app_info")
|
||||||
|
|
||||||
|
|
||||||
class SimditorImageUploadAPIView(APIView):
|
class SimditorImageUploadAPIView(APIView):
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
if "image" not in request.FILES:
|
if "image" not in request.FILES:
|
||||||
|
Loading…
Reference in New Issue
Block a user