Что имеем:
1) сайт с исправной формой обратной связи (и, собственно, вьюхой, которая собирает данные и отправляет их письмом);
2) второй сайт с формой, состоящей только из кнопки. ction привязан к местной вьюхе, однако внутри нее должен быть запрос на сайт из п.1, чтобы передать данные из формы по url-адресу.
Что делать? Прилагаю код обоих представлений.
Отправитель:
def Payment(request):
if request.method =='POST':
URL = 'http://oriflame.pythonanywhere.com/'
URL2 = 'http://oriflame.pythonanywhere.com/form_call/'
client = requests.session()
client.get(URL)
csrftoken = client.cookies['csrftoken']
login_data = dict(lastname='Игин', name='Anton', middlename='Konst testim', birthday='2017-01-20', telephone='896-002-00-02', csrfmiddlewaretoken=csrftoken)
return client.post(URL2, data=login_data)
Получатель:
def message_call(request):
if request.POST:
form = Message_Form(request.POST)
name = request.POST.get('name', '')
mail = request.POST.get('mail', '')
msg = request.POST.get('msg', '')
if form.is_valid():
mail_host = SMTPMail.objects.all()[0]
rec_list = RecMail.objects.all()
recipients= []
for mail in rec_list:
recipients.append(mail.mail) #Список получателей
message = '''
На сайте вашей структуры NL International пришло сообщение от пользователя {0} с ящика {1}! Вот его содержание:
___
Сообщение: {2}'''.format(name,mail, msg)
subject= 'Сообщение на сайте'
send_mail(subject, message, mail_host.mail, recipients, fail_silently=False)
return redirect('/thanks/')
else:
return redirect('/error/')
Простой пост-запрос от отправителя частично выполняет задачу: данные обрабатываются, письмо уходит, но пользователь не редиректится на страницу благодарности. Появляется следующая ошибка:
AttributeError at /order/payment/
'Response' object has no attribute 'get'
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/order/payment/
Django Version: 1.10.5
Python Version: 3.4.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main_site',
'shop_cart',
'orders']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "C:\Python34\lib\site-packages\django\utils\deprecation.py" in __call__
138. response = self.process_response(request, response)
File "C:\Python34\lib\site-packages\django\middleware\clickjacking.py" in process_response
32. if response.get('X-Frame-Options') is not None:
Exception Type: AttributeError at /order/payment/
Exception Value: 'Response' object has no attribute 'get'
Пробовал заменить return client.post на redirect:
return redirect(URL2, lastname='Игин', name='Anton', middlename='Konst testim', birthday='2017-01-20', telephone='896-002-00-02', csrfmiddlewaretoken=csrftoken)
При редиректе даже письма не приходит, появляется такая ошибка:
Traceback:
File "/var/www/jstar/lib/python3.4/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/var/www/jstar/lib/python3.4/site-packages/django/core/handlers/base.py" in _get_response
198. "returned None instead." % (callback.__module__, view_name)
Exception Type: ValueError at /form_call/
Exception Value: The view main_site.views.form_call didn't return an HttpResponse object. It returned None instead.
Updated 14 April 2017, 23:06 by aigin95.