2010-01-05 71 views
1

後,我有以下看法代碼:Django的形式:重裝查看後

def activate(request = '', actkey = ""): 
    message = "" 
    if len(actkey) != 40: 
     message += str(len(actkey)) 
     if request.method == 'POST': 
      form = ActivateForm(request.POST) 
      if form.is_valid(): 
       actkey = request.POST['actkey'] 
       activate('', actkey) 
     else: 
      form = ActivateForm() 
    else: 
     profile = userprofile.objects.get(actkey = actkey) 
     user = User.objects.get(id = profile.user_id) 
     user.is_active = True 
     user.save() 
     profile.actkey = "" 
     profile.save() 
     message += "Uw account is succesvol geactiveerd." 
     return render_to_response('profile/register.html', { 'message' : message }) 
    return render_to_response('profile/register.html', { 'message' : message, 'form' : form }) 

它的作用很簡單,當激活密鑰是通過URL給出,它進入: 配置= USERPROFILE .. ..等 但是,當它沒有給它加載Django的形式,所以用戶可以鍵入它的激活碼(到目前爲止都效果很好) 但是,當用戶發佈他的激活密鑰時,它出現在if len(actkey) != 40: 這不應該發生因爲激活碼是40 ...但由於它再次顯示窗體,但激活用戶以及我得到不想要的行爲...

我該如何解決這個問題?

感謝您的幫助

回答

-1

我可能會誤解您的意圖。 但我認爲當表格是有效的,你應該這樣做:

if form.is_valid(): 
    actkey = request.POST['actkey'] 
    activate('', actkey) 
    return render_to_response('profile/register.html', { 'message' : message }) 

ie。激活用戶後省略表單對象。

+0

這個函數在render()的引入之前,並且類似地工作,只是它沒有使得請求在響應中可用。這不被推薦,將來可能會被棄用。檢查文檔:https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/ – Ralphkay 2017-08-28 09:18:14

1

成功的表單提交

if request.method == 'POST': 
    form = ActivateForm(request.POST) 
    if form.is_valid(): 
    actkey = form.cleaned_data['actkey']#access cleaned_data instead of raw post 
    activate('', actkey) 
    return HttpResponseRedirect('/') 
0

它既不是完全是我一直在尋找後,您應該重定向,但我固定它是這樣的:

def activate(request = '', actkey = ""): 
message = "" 
if len(actkey) != 40: 
    if request.method == 'POST': 
     form = ActivateForm(request.POST) 
     if form.is_valid(): 
      actkey = request.POST['actkey'] 

      profile = userprofile.objects.get(actkey = actkey) 
      user = User.objects.get(id = profile.user_id) 
      user.is_active = True 
      user.save() 
      profile.actkey = "" 
      profile.save() 
      message += "Uw account is succesvol geactiveerd." 
      return render_to_response('profile/register.html', { 'message' : message }) 
    else: 
     form = ActivateForm() 
else: 
    profile = userprofile.objects.get(actkey = actkey) 
    user = User.objects.get(id = profile.user_id) 
    user.is_active = True 
    user.save() 
    profile.actkey = "" 
    profile.save() 
    message += "Uw account is succesvol geactiveerd." 
    return render_to_response('profile/register.html', { 'message' : message }) 
return render_to_response('profile/register.html', { 'message' : message, 'form' : form }) 

感謝您的答覆:)