Почему Django перенаправляет мои формы в другое место, чем указано в "действии" формы? - PullRequest
0 голосов
/ 24 октября 2011

Я использую модуль Django django.contrib.auth.forms, в частности класс UserCreationForm.

Вот шаблонная версия моей формы, где register_form - переменная, переданная из views.py, содержащая пустое UserCreationForm:

<form  id="registration" method="post" action="/register">
    {% csrf_token %}
    <table class="float_left">
        <tr><th><label for="id_username">Username:</label></th><td>{{  register_form.username }}</td></tr>
        <tr><th><label for="id_password1">Password:</label></th><td>{{  register_form.password1 }}</td></tr>
        <tr><th><label for="id_password2">Confirm Password:</label></th><td>{{  register_form.password2 }}</td></tr>
    </table>
    <input class="float_right button_input" type="submit" value="Register" />
</form>

Отображается очень хорошо на странице. Обратите внимание, что действие установлено на "/register". Однако когда я нажал на кнопку отправки, ничего не происходило. Я открыл очень удобную консоль JavaScript в Chrome и увидел следующий вывод (запущенный на сервере Django manage.py dev):

POST http://localhost:8000/includes/register.php 404 (NOT FOUND)

Высокий. Обратите внимание, что здесь Django (или что-то еще, возможно) вставил каталог includes в мой путь.

Вот соответствующий фрагмент из urls.py:

urlpatterns = patterns('',
    url(r'^register', 'authentication.views.register'),
)

А views.py:

def register(request):
# csrf is used to prevent Cross-Site Request Forgeries (i.e. XSS attacks, SQL injections, etc.)
c = {}
c.update(csrf(request))

# if logged in, redirect to personal profile
if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        new_user = form.save()
        return HttpResponseRedirect("/home")
else:
    c['register_form'] = UserCreationForm()
    return render_to_response('authentication/register.html', c, context_instance=RequestContext(request))

Просто очень простое перенаправление на /home, если форма была действительной (после сохранения нового пользователя в базе данных) или обратный возврат на ту же страницу в противном случае (authentication /register.html - соответствующий шаблон).

Я сбит с толку.

Заранее спасибо за все, что вы можете мне сказать.

РЕДАКТИРОВАТЬ: я должен заметить, я использовал http://localhost:8000/ в качестве домена для приложения Django, над которым я работаю уже довольно давно. Фактически, эта форма тоже работала нормально, когда я использовал для печати встроенный метод UserCreationForm as_table(). Но это выглядело ужасно, поэтому я переключился на ручное форматирование формы, и теперь это не работает. Я не настраивал тег <form> один раз. Я все еще должен был предоставить это до того, как начал печатать автоматически.

ОСНОВНОЕ РЕДАКТИРОВАНИЕ:

НЕПРЕРЫВНЫЕ ПАРНИ, Я ПОЛУЧИЛ ЭТО. Оказывается, на странице был какой-то устаревший код, который пытался вызвать какой-то старый php, который использовался для проверки формы, прежде чем я начал преобразовывать его в Django, который что я делал Спасибо за комментарии, но я собираюсь закрыть этот вопрос.

1 Ответ

0 голосов
/ 24 октября 2011

Если вы явно не указали это иначе, devserver Django обслуживает ваши страницы на 127.0.0.1:8000.

Из вашего POST URL я могу только догадываться, что у вас есть какое-то PHP-приложение, настроенное для обслуживания на http://localhost:8000, возможно, через Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...