Я только что обновился с django 1.4.5 до django 1.5.1 и заметил, что весь мой код обработки формы перестает работать. В частности, данные формы, возвращенные с помощью POST, больше не могут быть найдены.Невозможно связать данные формы после обновления до django 1.5.1
Джанго код -
здесь я следую инструкциям из документации Django 1.5 и передать в объекте request.POST после того как она отправленный пользователем для конкретизации LoginUserForm
class UserLoginForm(forms.Form):
email = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': 'Enter email',
'class': 'span4'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'span4'}))
def login_user(self,request):
user = None
if request.method == 'POST':
print "post:", request.POST.items()
form = UserLoginForm(request.POST)
if form.is_valid():
data = form.cleaned_data
email = data['email']
password = data['password']
if email and password:
user_service = UserService()
email = email.lower()
password = string_utils.hash_password(password)
user = user_service.get_by_email_and_password(password = password,
email = email)
return user
Моей формы шаблон
<form class="well" action="/web/user/login_user?next={{ next_url }}" method="post">
{% csrf_token %}
<label><strong>Email:</strong></label>
{{ form.email }}
<label><strong>Password:</strong></label>
{{ form.password }}
<br />
<div class="row">
<div class="span4" style="text-align: right;">
<button type="submit" class="btn">Login</button>
</div>
</div>
<div class="row">
<div class="span2">
<a href="/web/forgot_password" class="gray-underline" style="line-height: 25px; font-size: 12px; ">Forgot Password?</a>
</div>
<div class="span2" style="text-align: right;">
</div>
</div>
</form>
Выход Django.1.4.5 -
Django version 1.4.5, using settings 'myproj.settings'
post: [(u'csrfmiddlewaretoken', u'DnRTYpV1EF9XMQRAKoc3u37wya0TS3mX'), (u'password', u'abcde'), (u'email', u'[email protected]')]
data: {'password': u'abcde', 'email': u'[email protected]'}
Выход Джанго 1.5.1 -
Django version 1.5.1, using settings 'myproj.settings'
post: []
Я смотрел на примечания к выпуску Django 1.5.1 и заметил, есть часть о non-form data not being included in request.POST anymore.
Non-формы данных в HTTP запросы request.POST больше не будет включать в себя данные, отправленные с помощью HTTP-запросов с не образуют специфические> типов содержимого в заголовке. В предыдущих версиях данные, размещенные с типами контента, отличными от> multipart/form-data или application/x-www-form-urlencoded, по-прежнему будут представлены в атрибуте request.POST. Разработчики, желающие получить доступ к необработанным данным POST для этих случаев, должны использовать атрибут request.body.
Однако, учитывая мои данные, завернутые в <form></form>
элементах в шаблоне и генерируются с использованием Form
класса Джанго, я не могу понять, почему данные не в POST? Как извлечь данные формы?
Вы пробовали последнюю строку заметок, которые вы цитировали? – Ngenator
Да, request.body также был пуст. Кроме того, в документации указано «Неформальные данные в запросе.POST», но входные данные явно являются данными формы, поэтому его не следует исключать в первую очередь, верно? –
Попробуйте отправить email = form.cleaned_data.get ('email') и пароль = form.cleaned_data.get ('password') – nnmware