Django POST переменные не создаются
У меня странная проблема, меня попросили изменить форму Django, чтобы включить адрес (просто, я думал), оригинальная html форма собирает данные, имя, контакт и т.д., а затем views.py получает POST переменные, используя sender_name = request.POST.get('sender_name', ''), и т.д.
Адрес_отправителя, который является текстовой областью на HTML-форме, не включен в словарь. Я могу видеть все остальные POST-переменные. Странно то, что если я изменю одну из исходных POST переменных (имя) в HTML форме, например sender_name на sender_name1, она тоже перестает работать и исчезает из словаря.
Я новичок в Django, постепенно начинаю разбираться, есть ли в django способ защитить переменные сессии или я что-то упускаю. Данные формы не хранятся в dB, они отправляются по электронной почте. С представлением также не связан никакой forms.py. Я проверил все записи MIDDLWWARE на всякий случай тоже
Я погуглил проблему, но нашел только материал о сессиях, который не является полезным.
Спасибо.
<div class="wishlist_form">
<form method="POST" action="/store/wish-list-request/">{% csrf_token %}
<table>
<tr style="vertical-align:top">
<td>YOUR NAME:</td>
<td><input type="text" id="sender_name" name="sender_name" class="input" /></td>
</tr>
<tr style="vertical-align:top">
<td>YOUR ADDRESS:</td>
<td><textarea id="sender_address" name="sender_address" ></textarea></td>
</tr>
<tr style="vertical-align:top">
<td>YOUR EMAIL:</td>
<td><input type="text" id="sender_email" name="sender_email" class="input" /></td>
</tr>
<tr style="vertical-align:top">
<td>CONTACT NUMBER:</td>
<td><input type="text" id="sender_number" name="sender_number" class="input" /></td>
</tr>
<tr style="vertical-align:top">
<td>COMMENT:</td>
<td><textarea id="sender_comment" name="sender_comment"></textarea></td>
</tr>
<tr style="vertical-align:top">
<td> </td>
<td>
<input type="submit" value="submit your wish list »" class="wishlist_submit_btn">
<div id="ResponseDiv"></div>
</td>
</tr>
</table>
<input type="hidden" name="wishlist_objects" id="wishlist_objects" value="{% for item in list %}{{ item.article }}{% if not forloop.last %}|{% else %}{% endif %}{% endfor %}" />
<input type="hidden" name="hack" id="hack" value="" />
</form>
</div>
@csrf_exempt
def send_wishlist(request):
hack = request.POST.get('hack', '')
subject = "Wish List Order From Website"
sender_email = request.POST.get('sender_email', '')
sender_name = request.POST.get('sender_name', '')
sender_address = request.POST.get('sender_address',)
sender_number = request.POST.get('sender_number', '')
sender_comment = request.POST.get('sender_comment', '')
wishlist_objects = request.POST.get('wishlist_objects', '')
if len(hack) > 0 : #hacker, so fail here
return HttpResponse('Website notification error of Invalid header found.')
if subject and sender_email and sender_name and sender_number and wishlist_objects:
message = "Hi admin,\nNew Wish List Order From Website\n\n"
message += "Customer Name: " + sender_name + "\n";
message += "Customer Address: " + sender_address + "\n";
message += "Customer Email: " + sender_email + "\n";
message += "Customer Number: " + sender_number + "\n\n";
message += "Customer Comment:\n" + sender_comment + "\n\n";
message += "--------------------------------------------\n\n";
try:
sender="noreply@xxxx.xxx"
recipients=['xxx@xxxx.xxxx']
list = wishlist_objects.split('|')
for item in list:
message += "Article Number: " + item + "\n";
message += "\n";
message += "--------------------------------------------";
message += "\n\n";
send_mail(subject, message, sender, recipients, fail_silently=False, auth_user=None,
auth_password=None)
return HttpResponseRedirect('/store/wishlist/thanks/')
except BadHeaderError:
return HttpResponse('Sending mail failed because' + BadHeaderError)
else:
return HttpResponse('Invalid details provided - please go back and re-enter.' )
Предполагается, что проблема с "HTML" страницей или если вы используете JavaScript. Вы можете приложить код для пояснения
Благодаря @JanMalte за то, что подтолкнул меня в правильном направлении, это наконец-то решено!!! Был base.js, в котором вызывалась функция loadstoreinfo(), которая записывала POST данные.