Localhost перенаправлен слишком много раз, чтобы отправлять электронные письма в Django - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь просмотреть страницу контактов, где пользователи могут отправлять электронные письма. Однако, когда я обращаюсь к «/ contact», он показывает «ошибку: localhost меня перенаправил много раз». Я очистил свои куки несколько раз. Это работало раньше, и теперь эта ошибка сохраняется. Может кто-нибудь проверить, есть ли какая-либо ошибка кодирования, которую я должен был сделать? Я ценю ваши подробные отзывы!

views.py

ef contact(request):
    if request.method!='POST':
        return redirect('/contact')
    error=False
    if not EMAIL_REGEX.match(request.POST['from_email']):
        messages.error(request, "Please enter proper email")
        error=True
    if len(request.POST['message'])<2:
        messages.error(request, "Please enter message")
        error=True    
    else:
        message=request.POST.get('message')
        from_email=request.POST.get('from_email')

        email = EmailMessage(
            subject='Contact Form',
            body=message,
            from_email=settings.EMAIL_HOST_USER,
            to=[settings.EMAIL_HOST_USER],
            reply_to=[from_email]
        )
        email.send(fail_silently=False)

        messages.success(request, "Thank you for your message! We will reply soon.")
    return render(request, 'first_app/contact.html')

contact.html

 <h1 class=text-center>Contact</h1>
                {% if messages %}
                    {% for message in messages %}
                <div class="alert alert-success p-2 pb-3">
                    <a class="close font-weight-normal initialism" data-dismiss="alert" href="#"><samp>×</samp></a> 
                        {{message}}
                </div>
                    {% endfor %}
                {% endif %}
            <form action="/contact" method="POST">
            {% csrf_token %}
                <div class="form-group">
                    <label for="exampleFormControlInput1">Email address</label>
                    <input type="email" class="form-control" name="from_email" placeholder="Please enter e-mail" required>
                </div>
                <div class="form-group">
                    <label for="exampleFormControlTextarea1">Message</label>
                    <textarea class="form-control" name="message" rows="3" placeholder="Please enter message" required></textarea>
                </div>
                <button type="submit" value="/contact" class="btn btn-dark">Submit</button>
            </form>

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Ошибка в отношении перенаправления связана с вашим первым оператором if.Когда вы переходите к / contact, вы выполняете запрос GET, и, поскольку он не POST, он перенаправляется снова и снова.Как только это будет решено, вы столкнетесь с другой проблемой при переходе к / контакту, потому что вы не перехватываете запросы GET и не отображаете свою контактную форму.Я бы взглянул на Django docs в качестве примера того, как обрабатывать запросы GET и POST для вашей формы.

0 голосов
/ 26 апреля 2019

Ваш код может быть таким

def contact(request):
     if request.method == 'POST':
        error=False
        if not EMAIL_REGEX.match(request.POST['from_email']):
            messages.error(request, "Please enter proper email")
            error=True
        if len(request.POST['message'])<2:
            messages.error(request, "Please enter message")
            error=True    
        else:
            message=request.POST.get('message')
            from_email=request.POST.get('from_email')

            email = EmailMessage(
                subject='Contact Form',
                body=message,
                from_email=settings.EMAIL_HOST_USER,
                to=[settings.EMAIL_HOST_USER],
                reply_to=[from_email]
            )
            email.send(fail_silently=False)

            messages.success(request, "Thank you for your message! We will reply soon.")
    return render(request, 'first_app/contact.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...