Python Django 1.6:在页面之间临时保存表单数据

Python Django 1.6:在页面之间临时保存表单数据,python,django,forms,Python,Django,Forms,我正在创建一个用户评论表单,患者可以在其中留下对医生的评论。我只希望登录用户写一篇评论,每个医生每个用户只写一篇评论。无论用户是否已登录,都会向其显示一个审阅表单。如果未登录,单击提交按钮后,页面将重定向到登录表单,并在成功验证后重定向回医生配置文件。但是,当用户被重定向时,表单数据将丢失 如何临时保存表单数据,以便用户在成功身份验证后返回并可以提交表单时,表单数据仍保留在那里?我在某个地方读过它,你可以使用会话,但一切都是如此势不可挡,让我难以理解 docprofile.html {% if

我正在创建一个用户评论表单,患者可以在其中留下对医生的评论。我只希望登录用户写一篇评论,每个医生每个用户只写一篇评论。无论用户是否已登录,都会向其显示一个审阅表单。如果未登录,单击提交按钮后,页面将重定向到登录表单,并在成功验证后重定向回医生配置文件。但是,当用户被重定向时,表单数据将丢失

如何临时保存表单数据,以便用户在成功身份验证后返回并可以提交表单时,表单数据仍保留在那里?我在某个地方读过它,你可以使用会话,但一切都是如此势不可挡,让我难以理解

docprofile.html

{% if reviewed == False %}
<form action="" method="post" id="user_uploader" > {% csrf_token %}
<div class="revbox">
<textarea type="text" class="form-control" id="comment" placeholder="How was your experience?" name="comment" rows="6"></textarea>

<div class="subbox">
<div class="like-dis-check">
<p id="wouldrec"> Would you recommmend this doctor to someone else?</p>
<input type="radio" id="radio1" name="Like" value="Like">
<label id="r1" for="radio1">Yes</label>
<input type="radio" id="radio2" name="Like" value="Dislike">
<label id="r2" for="radio2">No</label>
</div>

<div class="drop1">
<input type="hidden" name="user" value="{{ user.id }}" />
<input type="hidden" name="doctor" value="{{ doctor.id }}" />
</div>

{% if not user.is_authenticated %}

<div class="subbutton">
<a class="btn btn-primary" href="{% url 'login' %}?next={{ request.path }}" type="" name="submit" id="ss-submit">Submit</a>
</div>

{% else %}

<div class="subbutton">
<button class="btn btn-primary" type="submit" name="submit"id="ss-submit">Submit</button>
</div>

{% endif %} 


<div class="errorbox">
{% for field in form.visible_fields %}
{{ field.errors }}
{% endfor %}
</div>
</div>
</div>
</form>
{% elif user.is_authenticated and reviewed == True  %}
<h4><a class="writebtn">Already Reviewed!</a></h4>
{% else %}
<a class="btn btn-primary writebtn" onclick = " ga('send','event', 'button' , 'Write a Review', 'Dr. {{doctor.name}}', 7);" href="{% url 'login' %}?next={{ request.path }}">Write a Review</a>  
{% endif %}

在模板中执行重定向是错误的。如果您这样做,就没有机会在会话中保存它。相反,您应该始终提交到您的
showDocProfile
视图,并在必要时执行重定向:

if request.user.is_authenticated():
    user = request.user
else:
    request.session['doctor_data'] = request.POST
    return redirect("{}?{}".format(reverse('login'), request.path))
if request.method == "POST":
...
else:
    data = request.session.pop('doctor_data', None)
    form = UserContentForm(data)
...

这节课确实是你要怎么做的。但我在代码中没有看到任何在用户未登录时重定向的内容;在哪里发生的?在docprofile中。{%如果不是user.is_身份验证%}。当用户单击“提交”按钮时,它会重定向到登录页面。但这样,用户在未登录的情况下甚至无法查看医生档案,更不用说尝试撰写评论了。我想在表单提交时提示登录。好的,将该逻辑移动到
请求中。方法==POST
检查。
if request.user.is_authenticated():
    user = request.user
else:
    request.session['doctor_data'] = request.POST
    return redirect("{}?{}".format(reverse('login'), request.path))
if request.method == "POST":
...
else:
    data = request.session.pop('doctor_data', None)
    form = UserContentForm(data)
...