コード例 #1
0
ファイル: content.py プロジェクト: htoooth/vuforia_cms
def edit(request, contractno):
    error_message = ''
    # 既存のコンテンツインスタンス(契約)
    i = Content.objects.get(contract_no__exact=contractno)
    # その画像ファイルの名前 ex. 'images/5.png'
    old_file_name = i.image.name
    # その画像ファイルのパス
    old_file_path = os.path.join(settings.MEDIA_ROOT, i.image.name)
    old_file_path_100 = os.path.join(settings.MEDIA_ROOT, 'images100',
                                     os.path.split(i.image.name)[1])
    old_file_path_300 = os.path.join(settings.MEDIA_ROOT, 'images300',
                                     os.path.split(i.image.name)[1])

    company = i.company
    with open(os.path.join(settings.STATIC_ROOT, 'json',
                           str(i.contract_no) + '.json')) as json_fp:
        dup = json.load(json_fp)['DUPLICATES']

    if request.POST:
        form = ContentForm(request.POST, request.FILES, instance=i)
        if form.is_valid():
            open_from   = form.cleaned_data['open_from']
            open_to     = form.cleaned_data['open_to']
            title       = form.cleaned_data['title']
            mapping_url = form.cleaned_data['mapping_url']

            metadata = create_metadata(i.contract_no, title, open_from,
                                       open_to, mapping_url, dup)
            print(metadata)

            # Vuforiaへの登録処理
            key_path = os.path.join(settings.BASE_DIR, '../accesskey.json')
            with open(key_path, "r", encoding="utf-8") as key_fp:
                key_dict = json.load(key_fp)
            v = vuforia.Vuforia(access_key=key_dict["ACCESS_KEY"],
                                secret_key=key_dict["SECRET_KEY"])
            if not request.FILES:
                data = {"name": title, "width": 320,
                        "application_metadata": metadata}
            else:
                # Python3では、byte型で扱うので、decode()する。
                image = base64.b64encode(
                        request.FILES['image'].read()).decode('utf-8')
                data = {"name": title, "width": 320, "image": image,
                        "application_metadata": metadata}

            # JSONファイルを作る。
            create_json(contractno, title, open_from, open_to,
                        mapping_url, dup)

            # フォームのデータをDBに保存する。
            new_content = form.save(commit=False)

            res = v.update_target(i.target_id, data)

            # Vuforia APIで登録処理が成功したら続きの処理を行う。
            if res['result_code'] == "Success":
                new_content.save()

                # TODO: この処理は他の機能を使ってもっとスッキリさせる。
                # 新たな画像が送られてきたとき、
                # 若しくはクリアが選択されたときは既存のファイルは削除する。
                # (編集処理で、かつ新しく保存した名前と前の名前が異なる時)
                if old_file_name and (new_content.image.name != old_file_name):
                    os.remove(old_file_path)
                    os.remove(old_file_path_100)
                    os.remove(old_file_path_300)

                    #logging.basicConfig(
                    #        filename='/Users/js/Desktop/django.log',
                    #        level=logging.INFO)
                    logging.info('ファイル削除\n')
                    #logger = logging.getLogger(__name__)
                    #logger.debug('ファイル削除?')

                return redirect('/content/list')

            # Vuforiaのレスポンスが成功でない場合
            else:
                # エラーメッセージを出力して戻る。
                error_message = res['result_code']
        else:
            return render(request, 'content_edit.html',
                {'form': form, 'contractno': contractno, 'content': i,
                 'company': company, 'error_message': error_message})
    else:
        form = ContentForm(instance=i)
    return render(request, 'content_edit.html',
            {'form': form, 'contractno': contractno, 'content': i,
             'company': company, 'error_message': error_message})
コード例 #2
0
def edit(request, contractno):
    error_message = ''
    # 既存のコンテンツインスタンス(契約)
    i = Content.objects.get(contract_no__exact=contractno)
    # その画像ファイルの名前 ex. 'images/5.png'
    old_file_name = i.image.name
    # その画像ファイルのパス
    old_file_path = os.path.join(settings.MEDIA_ROOT, i.image.name)
    old_file_path_100 = os.path.join(settings.MEDIA_ROOT, 'images100',
                                     os.path.split(i.image.name)[1])
    old_file_path_300 = os.path.join(settings.MEDIA_ROOT, 'images300',
                                     os.path.split(i.image.name)[1])

    company = i.company
    with open(
            os.path.join(settings.STATIC_ROOT, 'json',
                         str(i.contract_no) + '.json')) as json_fp:
        dup = json.load(json_fp)['DUPLICATES']

    if request.POST:
        form = ContentForm(request.POST, request.FILES, instance=i)
        if form.is_valid():
            open_from = form.cleaned_data['open_from']
            open_to = form.cleaned_data['open_to']
            title = form.cleaned_data['title']
            mapping_url = form.cleaned_data['mapping_url']

            metadata = create_metadata(i.contract_no, title, open_from,
                                       open_to, mapping_url, dup)
            print(metadata)

            # Vuforiaへの登録処理
            key_path = os.path.join(settings.BASE_DIR, '../accesskey.json')
            with open(key_path, "r", encoding="utf-8") as key_fp:
                key_dict = json.load(key_fp)
            v = vuforia.Vuforia(access_key=key_dict["ACCESS_KEY"],
                                secret_key=key_dict["SECRET_KEY"])
            if not request.FILES:
                data = {
                    "name": title,
                    "width": 320,
                    "application_metadata": metadata
                }
            else:
                # Python3では、byte型で扱うので、decode()する。
                image = base64.b64encode(
                    request.FILES['image'].read()).decode('utf-8')
                data = {
                    "name": title,
                    "width": 320,
                    "image": image,
                    "application_metadata": metadata
                }

            # JSONファイルを作る。
            create_json(contractno, title, open_from, open_to, mapping_url,
                        dup)

            # フォームのデータをDBに保存する。
            new_content = form.save(commit=False)

            res = v.update_target(i.target_id, data)

            # Vuforia APIで登録処理が成功したら続きの処理を行う。
            if res['result_code'] == "Success":
                new_content.save()

                # TODO: この処理は他の機能を使ってもっとスッキリさせる。
                # 新たな画像が送られてきたとき、
                # 若しくはクリアが選択されたときは既存のファイルは削除する。
                # (編集処理で、かつ新しく保存した名前と前の名前が異なる時)
                if old_file_name and (new_content.image.name != old_file_name):
                    os.remove(old_file_path)
                    os.remove(old_file_path_100)
                    os.remove(old_file_path_300)

                    #logging.basicConfig(
                    #        filename='/Users/js/Desktop/django.log',
                    #        level=logging.INFO)
                    logging.info('ファイル削除\n')
                    #logger = logging.getLogger(__name__)
                    #logger.debug('ファイル削除?')

                return redirect('/content/list')

            # Vuforiaのレスポンスが成功でない場合
            else:
                # エラーメッセージを出力して戻る。
                error_message = res['result_code']
        else:
            return render(
                request, 'content_edit.html', {
                    'form': form,
                    'contractno': contractno,
                    'content': i,
                    'company': company,
                    'error_message': error_message
                })
    else:
        form = ContentForm(instance=i)
    return render(
        request, 'content_edit.html', {
            'form': form,
            'contractno': contractno,
            'content': i,
            'company': company,
            'error_message': error_message
        })
コード例 #3
0
ファイル: content.py プロジェクト: htoooth/vuforia_cms
def new(request, contractno):
    error_message = ''
    # 既存のコンテンツインスタンス(契約)
    i = Content.objects.get(contract_no__exact=contractno)
    # その画像ファイルの名前
    old_file_name = i.image.name
    # その画像ファイルのパス
    old_file_path = os.path.join(settings.MEDIA_ROOT, i.image.name)

    company = i.company
    if request.POST:
        form = ContentForm(request.POST, request.FILES, instance=i)
        if form.is_valid():
            open_from   = form.cleaned_data['open_from']
            open_to     = form.cleaned_data['open_to']
            title       = form.cleaned_data['title']
            mapping_url = form.cleaned_data['mapping_url']

            # Vuforiaへの登録処理
            key_path = os.path.join(settings.BASE_DIR, '../accesskey.json')
            with open(key_path, "r", encoding="utf-8") as key_fp:
                key_dict = json.load(key_fp)
            v = vuforia.Vuforia(access_key=key_dict["ACCESS_KEY"],
                                secret_key=key_dict["SECRET_KEY"])
            if request.FILES:
                image = base64.b64encode(
                        request.FILES['image'].read()).decode('utf-8')
            metadata = create_metadata(i.contract_no, title, open_from,
                                       open_to, mapping_url, [])

            # JSONファイルを作る。
            create_json(contractno, title, open_from, open_to,
                        mapping_url, [])

            # フォームのデータをDBに仮保存する。
            new_content = form.save(commit=False)

            res = v.add_target(
                    {"name": title, "width": 320, "image": image,
                     "application_metadata": metadata, "active_flag": 0})

            # Vuforia APIで登録処理が成功したら続きの処理を行う。
            if res['result_code'] == "TargetCreated":
                new_content.target_id = res['target_id']

                # TODO: ここでエラーとなると、
                # Vuforiaには登録されていて、自DBには無い状態になる。
                new_content.save()
                return redirect('/content/list')

            # Vuforiaのレスポンスが成功でない場合
            else:
                # エラーメッセージを出力して戻る。
                error_message = res['result_code']
        else:
            return render(request, 'content_new.html',
                {'form': form, 'contractno': contractno,
                 'company': company, 'error_message': error_message})
    else:
        form = ContentForm(instance=i)
    return render(request, 'content_new.html',
            {'form': form, 'contractno': contractno,
             'company': company, 'error_message': error_message})
コード例 #4
0
def new(request, contractno):
    error_message = ''
    # 既存のコンテンツインスタンス(契約)
    i = Content.objects.get(contract_no__exact=contractno)
    # その画像ファイルの名前
    old_file_name = i.image.name
    # その画像ファイルのパス
    old_file_path = os.path.join(settings.MEDIA_ROOT, i.image.name)

    company = i.company
    if request.POST:
        form = ContentForm(request.POST, request.FILES, instance=i)
        if form.is_valid():
            open_from = form.cleaned_data['open_from']
            open_to = form.cleaned_data['open_to']
            title = form.cleaned_data['title']
            mapping_url = form.cleaned_data['mapping_url']

            # Vuforiaへの登録処理
            key_path = os.path.join(settings.BASE_DIR, '../accesskey.json')
            with open(key_path, "r", encoding="utf-8") as key_fp:
                key_dict = json.load(key_fp)
            v = vuforia.Vuforia(access_key=key_dict["ACCESS_KEY"],
                                secret_key=key_dict["SECRET_KEY"])
            if request.FILES:
                image = base64.b64encode(
                    request.FILES['image'].read()).decode('utf-8')
            metadata = create_metadata(i.contract_no, title, open_from,
                                       open_to, mapping_url, [])

            # JSONファイルを作る。
            create_json(contractno, title, open_from, open_to, mapping_url, [])

            # フォームのデータをDBに仮保存する。
            new_content = form.save(commit=False)

            res = v.add_target({
                "name": title,
                "width": 320,
                "image": image,
                "application_metadata": metadata,
                "active_flag": 0
            })

            # Vuforia APIで登録処理が成功したら続きの処理を行う。
            if res['result_code'] == "TargetCreated":
                new_content.target_id = res['target_id']

                # TODO: ここでエラーとなると、
                # Vuforiaには登録されていて、自DBには無い状態になる。
                new_content.save()
                return redirect('/content/list')

            # Vuforiaのレスポンスが成功でない場合
            else:
                # エラーメッセージを出力して戻る。
                error_message = res['result_code']
        else:
            return render(
                request, 'content_new.html', {
                    'form': form,
                    'contractno': contractno,
                    'company': company,
                    'error_message': error_message
                })
    else:
        form = ContentForm(instance=i)
    return render(
        request, 'content_new.html', {
            'form': form,
            'contractno': contractno,
            'company': company,
            'error_message': error_message
        })