Django - как отправить информацию POST из одного представления в другое

У меня есть регистрационная форма, и если регистрационная форма заполнена правильно и действительна, я хочу, чтобы пользователь автоматически входил в систему. Вид входа находится по URL-адресу

/login/

и это представление входа в систему, с которым связан этот URL-адрес (это общее представление входа):

def login(request, template_name='registration/login.html',
      redirect_field_name=REDIRECT_FIELD_NAME,
      authentication_form=AuthenticationForm,
      current_app=None, extra_context=None):

    if request.method == "POST":
        form = authentication_form(data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()

            return HttpResponseRedirect(redirect_to)

else:
    form = authentication_form(request)

request.session.set_test_cookie()

current_site = get_current_site(request)

context = {
    'form': form,
    redirect_field_name: redirect_to,
    'site': current_site,
    'site_name': current_site.name,
}
if extra_context is not None:
    context.update(extra_context)
return TemplateResponse(request, template_name, context,
                        current_app=current_app)

Теперь представление, которое обрабатывает регистрацию:

def registrationView(request):
    if request.method == 'POST':
    form = RegistrationForm(request.POST)

    if form.is_valid():
        user = User.objects.create_user(
        username=form.clean_data['username'],
        password=form.clean_data['password1'],
        email=form.clean_data['email']
        )
        return HttpResponseRedirect('/login/')

Теперь, когда я перенаправляюсь на

/login/

в представлении регистрации, могу ли я отправить имя пользователя и пароль в виде информации «POST», чтобы, когда он достигнет представления входа в систему

if request.method == "POST":

оценивается как истина?


person SilentDev    schedule 17.01.2014    source источник
comment
Зачем тебе это?   -  person geekazoid    schedule 17.01.2014
comment
@geekazoid, потому что я хочу использовать режим входа в систему для входа пользователя.   -  person SilentDev    schedule 17.01.2014


Ответы (1)


Я думаю, что вместо того, чтобы пытаться делать такую ​​​​магию, вы должны установить текущего пользователя в свою сессию.

def registrationView(request):
    if request.method == 'POST':
    form = RegistrationForm(request.POST)

    if form.is_valid():
        user = User.objects.create_user(
        username=form.cleaned_data['username'],
        password=form.cleaned_data['password1'],
        email=form.cleaned_data['email']
        )
        login(request, user) 

        return HttpResponseRedirect('...')

Взгляните на https://docs.djangoproject.com/en/1.5/topics/auth/default/#django.contrib.auth.login

person geekazoid    schedule 17.01.2014
comment
хм, имеет смысл. Когда я использую ваш код, он дает сообщение об ошибке, говорящее, что объект «RegistrationForm» не имеет атрибута «clean_data» и отслеживается до строки username = form.clean_data ['username'], в RegistrationView .. есть идеи, почему? - person SilentDev; 17.01.2014
comment
cleaned_data - person sk1p; 17.01.2014
comment
@ sk1p да, только что заметил, спасибо, проблема решена. - person SilentDev; 17.01.2014
comment
@user2719875 user2719875 вы изменили настройки TEMPLATE_CONTEXT_PROCESSORS? Он по-прежнему содержит процессор контекста auth? Вы пытались поместить {{ user }} или {{ user.username }} в свой шаблон? - person sk1p; 17.01.2014