Запрос новой учетной записи пользователя по электронной почте Django - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь сделать небольшую функцию для пользователя, чтобы запросить учетную запись, и информация, которую он вводит, отправляется человеку, который будет создавать учетную запись.Я следовал этому примеру в основном http://djangosnippets.org/snippets/261/, но он очень старый и может быть неточным, потому что у меня есть, и поэтому у меня проблемы с ним.

У меня есть этот код в настоящее время:

account / models.py

from django import forms
from django.core.mail import send_mail, BadHeaderError

# A simple contact form with four fields.
class NewAccountForm(forms.Form):
    first_name = forms.CharField()
    last_name = forms.CharField()
    email = forms.EmailField()

account / views.py

from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from account.models import NewAccountForm
from django import forms
from django.core.mail import send_mail, BadHeaderError

def request_account_view(request):
        first_name = request.POST.get('first_name', '')
        last_name = request.POST.get('last_name', '')
        email = request.POST.get('email', '')
        message = (first_name + ' ' + last_name + '  has requested a new account for the email ' + email)
        if first_name and last_name and email:
                try:
                    send_mail('Request for Account', message, email, ['example@example.com'])
                except BadHeaderError:
                        return HttpResponse('Invalid header found.')
                return HttpResponseRedirect('/thankyou/')
        else:
            return render_to_response('new_account.html', {'form': NewAccountForm()})

        return render_to_response('new_account.html', {'form': NewAccountForm()},
            RequestContext(request))

def thankyou(request):
        return render_to_response('thankyou.html')

urls.py

(r'^thankyou/$', 'account.views.thankyou'),
(r'^new_account/$', 'account.views.request_account_view'),

templates / new_account.html

{% extends "base.html" %}
{% block content %}
<form action="/new_account/" method="post">
{% csrf_token %}
    <label id="id_first_name">First Name:</label>
    <input type="text" name="first_name" value="" id="first_name" />
    <label id="id_last_name">Last Name:</label>
    <input type="text" name="last_name" value="" id="last_name" />
    <label id="id_email">Email:</label>
    <input type="text" name="email" value="" id="email" />
    <input type="submit" value="Submit Request"/>
</form>
{% endblock %}

Я получаю сообщение об ошибке:

Forbidden (403)
CSRF verification failed. Request aborted.

, которое возникает после ввода имени и пароля и нажатия кнопки отправки.Мой почтовый хост работает нормально, потому что раньше я работал над функцией «Забыли пароль».Буду очень признателен за помощь.Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Вы добавили django.middleware.csrf.CsrfViewMiddleware в свой список классов промежуточного программного обеспечения, MIDDLEWARE_CLASSES?(Это должно предшествовать любому промежуточному программному обеспечению представления, предполагающему, что атаки CSRF были выполнены.)

Подробнее о защите CSRF от Django можно узнать здесь: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

0 голосов
/ 04 августа 2011

RequestContext(request) должно быть использовано .В вашем коде ниже второй возврат никогда не будет достигнут, поэтому вы не передаете RequestContext в шаблон.

    else:
        return render_to_response('new_account.html', {'form': NewAccountForm()})

    return render_to_response('new_account.html', {'form': NewAccountForm()},
        RequestContext(request))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...