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})
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 })
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})
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 })