0

我有一個註冊表單,如果註冊表單填寫正確且有效,我想自動登錄該用戶。登錄視圖位於URLDjango - 如何將POST信息從一個視圖發送到另一個視圖

/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": 

評估爲真?

+0

爲什麼你想要做那件事? – geekazoid

+0

@geekazoid因爲我想使用登錄視圖來登錄用戶。 – user2719875

回答

2

我認爲,而不是試圖做這樣的魔術,你應該設置當前用戶到你的會話。

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

+0

hm,這很有道理。當我使用你的代碼時,它會給出一個錯誤,說''RegistrationForm'對象沒有'clean_data'屬性,並且回溯到註冊視圖中的「username = form.clean_data ['username']」這一行。 ? – user2719875

+2

[cleared_data](https://docs.djangoproject.com/en/1.6/ref/forms/api/#django.forms.Form.cleaned_data) – sk1p

+0

@ sk1p只是注意到,謝謝,解決了這個問題。 – user2719875

相關問題