2010-08-18 5 views
2

У меня есть страница, 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, используя профиль пользователя или что-то в этом роде, но как насчет UserCreationForm? Должен ли я перевернуть свою форму? Должно ли оно как-то унаследовать от UserCreationForm?

ответ

0

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

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

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


редактировать:

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

В качестве альтернативы, если вы просто перенаправлять на страницы, которые обрабатывают каждую форму, вы можете добавить эти формы, используя direct_to_template «s extra_context параметра непосредственно в 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

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

Смежные вопросы