Exemple #1
0
def SettingsAvatarHandler(request):
    if request.method == 'GET':
        site = GetSite()
        session = request.session
        browser = detect(request)
        template_values = {}
        template_values['site'] = site
        template_values['page_title'] = site.title + u' › 头像'
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(request)
        l10n = GetMessages(member, site)
        template_values['l10n'] = l10n
        if (member):
            if 'message' in session:
                template_values['message'] = session['message']
                del session['message']
            template_values['member'] = member
            if browser['ios']:
                path = os.path.join('mobile', 'member_settings_avatar.html')
            else:
                path = os.path.join('desktop', 'member_settings_avatar.html')
            return render_to_response(path, template_values)
        else:
            return HttpResponseRedirect('/signin')

    else:
        site = GetSite()
        session = request.session
        browser = detect(request)
        template_values = {}
        template_values['site'] = site
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(request)
        l10n = GetMessages(member, site)
        template_values['l10n'] = l10n
        if (member):
            dest = '/settings-avatar/'
            timestamp = str(int(time.time()))
            try:
                image_req = request.FILES['avatar']
                if image_req is None:
                    return HttpResponseRedirect(dest)
                ext = str(image_req).split('.')
                # 图片文件格式,并且文件大小不能超过2MB
                if len(ext) == 2 and image_req.size < 1024 * 1024 * 2:
                    ext = ext[1].lower()
                    if ext == "jpg" or ext == "jpeg" or ext == "bmp" or ext == 'png':
                        timestamp = str(
                            int(
                                time.mktime(
                                    datetime.datetime.now().timetuple())))
                        datetoday = str(
                            datetime.datetime.today())[0:10].replace('-', '')
                        new_name_src = timestamp + "." + ext
                        new_name_large = timestamp + "_l." + ext
                        new_name_normal = timestamp + "_n." + ext
                        new_name_small = timestamp + "_s." + ext
                        save_path = settings.STATIC_UPLOAD + "/" + member.user.username + "/" + datetoday
                        if not os.path.exists(save_path):
                            os.makedirs(save_path)
                        # Source image
                        image = Image.open(image_req)
                        image.save(save_path + "/" + new_name_src, 'jpeg')
                        # Large 73x73
                        image.thumbnail((73, 73), Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_large, 'jpeg')
                        member.avatar_large_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_large
                        # Normal 48x48
                        image.thumbnail((48, 48), Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_normal, 'jpeg')
                        member.avatar_normal_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_normal
                        # Small 24x24
                        image.thumbnail((24, 24), Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_small, 'jpeg')
                        member.avatar_mini_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_small
                        # Save avatar info
                        member.save()
                    else:
                        return HttpResponseRedirect(dest)
                else:
                    return HttpResponseRedirect(dest)
            except:
                print "Unexpected error:", sys.exc_info()
                return HttpResponseRedirect(dest)
            memcache.set('Member_' + str(member.num), member, 86400 * 365)
            memcache.set('Member::' + member.username_lower, member,
                         86400 * 365)
            memcache.delete('Avatar::avatar_' + str(member.num) + '_large')
            memcache.delete('Avatar::avatar_' + str(member.num) + '_normal')
            memcache.delete('Avatar::avatar_' + str(member.num) + '_mini')
            session['message'] = '新头像设置成功'
            return HttpResponseRedirect('/settings-avatar/')
        else:
            return HttpResponseRedirect('/signin')
Exemple #2
0
def SettingsAvatarHandler(request):
    if request.method == 'GET':
        site = GetSite()
        session = request.session
        browser = detect(request)
        template_values = {}
        template_values['site'] = site
        template_values['page_title'] = site.title + u' › 头像'
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(request)
        l10n = GetMessages(member, site)
        template_values['l10n'] = l10n
        if (member):
            if 'message' in session:
                template_values['message'] = session['message']
                del session['message']
            template_values['member'] = member
            if browser['ios']:
                path = os.path.join('mobile', 'member_settings_avatar.html')
            else:
                path = os.path.join('desktop', 'member_settings_avatar.html')
            return render_to_response(path, template_values)
        else:
            return HttpResponseRedirect('/signin')

    else:
        site = GetSite()
        session = request.session
        browser = detect(request)
        template_values = {}
        template_values['site'] = site
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(request)
        l10n = GetMessages(member, site)
        template_values['l10n'] = l10n
        if (member):
            dest = '/settings-avatar/'
            timestamp = str(int(time.time()))
            try:
                image_req = request.FILES['avatar']
                if image_req is None:
                    return HttpResponseRedirect(dest)
                ext = str(image_req).split('.');
                # 图片文件格式,并且文件大小不能超过2MB
                if len(ext) == 2 and image_req.size<1024*1024*2:
                    ext = ext[1].lower()
                    if ext=="jpg" or ext=="jpeg" or ext=="bmp" or  ext=='png':
                        timestamp = str(int(time.mktime(datetime.datetime.now().timetuple())))
                        datetoday= str(datetime.datetime.today())[0:10].replace('-', '')
                        new_name_src = timestamp + "." + ext
                        new_name_large = timestamp + "_l." + ext
                        new_name_normal = timestamp + "_n." + ext
                        new_name_small = timestamp + "_s." + ext
                        save_path = settings.STATIC_UPLOAD + "/" + member.user.username + "/" + datetoday
                        if not os.path.exists(save_path):
                            os.makedirs(save_path)
                        # Source image
                        image = Image.open(image_req)
                        image.save(save_path + "/" + new_name_src, 'jpeg')
                        # Large 73x73
                        image.thumbnail((73,73),Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_large, 'jpeg')
                        member.avatar_large_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_large
                        # Normal 48x48
                        image.thumbnail((48,48),Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_normal, 'jpeg')
                        member.avatar_normal_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_normal
                        # Small 24x24
                        image.thumbnail((24,24),Image.ANTIALIAS)
                        image.save(save_path + "/" + new_name_small, 'jpeg')
                        member.avatar_mini_url = settings.STATIC_UPLOAD_WEB + member.user.username + "/" + datetoday + "/" + new_name_small
                        # Save avatar info
                        member.save()
                    else:
                        return HttpResponseRedirect(dest)
                else:
                    return HttpResponseRedirect(dest)
            except:
                print "Unexpected error:", sys.exc_info()
                return HttpResponseRedirect(dest)
            memcache.set('Member_' + str(member.num), member, 86400 * 365)
            memcache.set('Member::' + member.username_lower, member, 86400 * 365)
            memcache.delete('Avatar::avatar_' + str(member.num) + '_large')
            memcache.delete('Avatar::avatar_' + str(member.num) + '_normal')
            memcache.delete('Avatar::avatar_' + str(member.num) + '_mini')
            session['message'] = '新头像设置成功'
            return HttpResponseRedirect('/settings-avatar/')
        else:
            return HttpResponseRedirect('/signin')