Add avatar upload api

This commit is contained in:
Chiaki 2017-04-18 15:35:08 +08:00
parent ee05af8e5a
commit 1fcd13b5e1
2 changed files with 21 additions and 1 deletions

View File

@ -3,12 +3,13 @@
from django.conf.urls import url
from ..views.user import (UserInfoAPI, UserProfileAPI,
from ..views.user import (UserInfoAPI, UserProfileAPI, AvatarUploadAPI,
SSOAPI, TwoFactorAuthAPI)
urlpatterns = [
url(r"^user$", UserInfoAPI.as_view(), name="user_info_api"),
url(r"^profile$", UserProfileAPI.as_view(), name="user_profile_api"),
url(r"^avatar/upload$", AvatarUploadAPI.as_view(), name="avatar_upload_api"),
url(r"^sso$", SSOAPI.as_view(), name="sso_api"),
url(r"^two_factor_auth$", TwoFactorAuthAPI.as_view(), name="two_factor_auth_api")
]

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import qrcode
from io import StringIO
@ -56,6 +57,24 @@ class UserProfileAPI(APIView):
return self.success(_("Succeeded"))
class AvatarUploadAPI(APIView):
def post(self, request):
if "file" not in request.FILES:
return self.error(_("Upload failed"))
f = request.FILES["file"]
if f.size > 1024 * 1024:
return self.error(_("Picture too large"))
if os.path.splitext(f.name)[-1].lower() not in [".gif", ".jpg", ".jpeg", ".bmp", ".png"]:
return self.error(_("Unsupported file format"))
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 self.success({"path": "/static/upload/" + name})
class SSOAPI(APIView):
@login_required
def get(self, request):