나는 모든 고유 ID를 가진 엔티티와 작동하는 웹 응용 프로그램에서 작업하고 있습니다.Python Django - 액세스 응답 헤더보기에서
사용자가이 엔티티를 만들 수있는 제출 양식이 있으며이 양식은 여러 단계 (제출 프로세스가 완료 될 때까지보기 1에서보기 2로 리디렉션되는 등)입니다.
첫 번째보기는 양식 제출 후 엔티티의 ID를 작성한 다음 다른보기에서 작성된 인스턴스의 ID를 사용해야합니다.
이 ID는 URL 매개 변수로 다른보기에 전달하지 않으므로 POST가되며 사용자가 여러 ID에 대해 모델에서 레코드를 쉽게 만들 수 있습니다. 이 ID를 세션 매개 변수 (request.session)를 사용하여 여러보기로 전달했지만이 값은 세션에 영구적이므로 이상적이지 않습니다. 아래 현재 코드 :
def view1(request):
if request.method == 'POST':
form = xxx_creation_form(request.POST)
if form.is_valid():
cleaned_form_data = form.cleaned_data
xxx_entry = Model.objects.create(
... object creation ...
)
request.session['xxx_id'] = xxx_entry.id
return HttpResponseRedirect(reverse('form_2'))
else:
form = xxx_creation_form()
return render(request, 'xxx_form.html', {'form': form})
def view2(request):
xxx_id = request.session['property_id']
if xxx_id == 'SET_BACK_BLANK':
return render(request, 'no_xxx_id.html')
if request.method == 'POST':
form = xxx_form2(request.POST)
if form.is_valid():
cleaned_form_data = form.cleaned_data
xxx_entry = Model.objects.create(
id = xxx_id, #use the id created in step 1
... rest of object creation ...
)
request.session['xxx_id'] = 'SET_BACK_BLANK' #to avoid the misuse during other user interactions.
return HttpResponseRedirect(reverse('thanks'))
else:
form = xxx_form2()
return render(request, 'xxx_form2.html', {'form': form})
적으로는, 내가 세션 매개 변수로 ID를 가진 피할이 같은 응답의 헤더에이 ID의 매개 변수를 전달하고 싶습니다. 그래서 아래에 코드를 수정했습니다 :
def view1(request):
if request.method == 'POST':
form = xxx_creation_form(request.POST)
if form.is_valid():
cleaned_form_data = form.cleaned_data
xxx_entry = Model.objects.create(
... object creation ...
)
response = HttpResponseRedirect(reverse('form_2'))
response['xxx_id'] = xxx_entry.id
return response
else:
form = xxx_creation_form()
return render(request, 'xxx_form.html', {'form': form})
def view2(request):
xxx_id = HttpResponseRedirect(request).__getitem__('xxx_id')
if request.method == 'POST':
form = xxx_form2(request.POST)
if form.is_valid():
cleaned_form_data = form.cleaned_data
xxx_entry = Model.objects.create(
id = xxx_id, #use the id created in step 1
... rest of object creation ...
)
return HttpResponseRedirect(reverse('thanks'))
else:
form = xxx_form2()
return render(request, 'xxx_form2.html', {'form': form})
위에서 작동하지 않고 오류 메시지가 응답 헤더에는 'xxx_id이'가 존재하지 않는다는 것을 나타 내기 위해 보인다 그러나.
요청의 헤더를 수정할 수없는 것처럼 보이는 사람이보기의 응답 헤더에 액세스하는 방법을 알려 주면 좋을 것입니다.
감사합니다.
안녕 다니엘, 답장을 보내 주셔서 감사합니다. HttpResponseRedirect 요청/응답주기를 명확히하기 위해 HttpResponseRedirect를 사용하면 followin 프로세스가 생성됩니다. 1/HttpResponse 객체 생성 (django 문서 참조) 2/다른 HttpRequest 및 HttpResponse (리디렉션)가 생성됩니다. 그렇지 않으면 당신의 제안이 합리적이라고 생각합니다. 감사. – RobinW2
나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 앞서 말했듯이 브라우저에서 리디렉션을 반환하는 것은 브라우저에 다른 페이지를 요청하는 명령입니다. 이것은 새로운 요청이기 때문에 뷰가 호출 될 때 새로운 요청 객체를 얻습니다. –
괜찮습니다. 내 문제를 해결할 때 대답으로 당신의 대답을 표시 할 것입니다. – RobinW2