Вопрос аутентификации новичка - PullRequest
2 голосов
/ 19 августа 2010

У меня есть страница index.html, которая содержит как форму входа, так и форму регистрации.У меня есть пара вопросов о том, как заставить это работать правильно

Мой URLConfig выглядит так:

urlpatterns = patterns('djangoproject1.authentication.views',
    (r'^$',direct_to_template,{'template':'authentication/index.html'}),
    (r'^register/$','register'),
)

1) Использование книги Django - это руководство, моя форма выглядит так:

<h1>Register</h1>
    <form action="/register/" method="post">
        {{ form.as_p }}
        <input type="submit" value="Register">
    </form>

Конечно, поскольку файл index.html, форма не появляется, когда я просто перехожу на страницу.Нужно ли мне "представление" для обработки посещения index.html, а не direct_to_template?

2) Мой код регистрации выглядит следующим образом:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/register/success/")
        else:
            form = UserCreationForm()
    return render_to_response("authentication/index.html", {'form': form})

Это встроенная аутентификация djangoвещи.Люди действительно используют это?Это кажется ограниченным.Я знаю, что могу добавить больше полей для пользователя Django с помощью профиля пользователя или чего-то еще, но как насчет UserCreationForm?Должен ли я свернуть свою форму?Должен ли он как-то наследоваться от UserCreationForm?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

direct_to_template сам по себе не может ни создавать, ни обрабатывать формы - он просто обрабатывает запрос непосредственно к шаблону, как описывает его имя.

Вы можете посмотреть django-registration для регистрации.

Если вы размещаете две формы на одной странице, вам понадобится настраиваемое представление, способное отображать и обрабатывать обе формы, хотя с несколькими формами общеизвестно сложно работать должным образом.,Если у вас есть отдельные формы (и кнопки отправки), вы можете добавить уникальное имя к каждому входу отправки и определить, какую форму (класс) нужно проверять и обрабатывать на основе if name in request.POST.


edit:

После более внимательного изучения вашего кода я вижу, что ваша регистрационная форма перенаправляет в другое представление;это упрощает работу, но вам все равно понадобится настраиваемое представление для домашней страницы, которое передает формы входа и регистрации в шаблон для рендеринга.

В качестве альтернативы, если вы просто перенаправляете на страницы, которые обрабатывают каждую форму, вы можете добавить эти формы, используя extra_context параметр *1019* непосредственно в вашем urls.py:

from wherever import LoginForm, RegistrationForm

urlpatterns = patterns('djangoproject1.authentication.views',
    (r'^$',
        direct_to_template,
        {
            'template': 'authentication/index.html',
            'extra_context': {
                'reg_form': RegistrationForm(),
                'login_form': LoginForm()
            }
        }
    ),
    (r'^register/$', 'register'),
)

Этот подход не самый чистый, но это вариант, если вы действительно хотел использовать общие представления.

0 голосов
/ 19 августа 2010

Похоже, вы, вероятно, захотите использовать другой общий вид вместо direct_to_tepmlate. Посмотрите на общий вид create . Обычно я просто создаю представление, обычно мне приходится делать больше, чем то, что позволяет мне сделать общее представление.

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