我有一個簡單註冊表單(在signup.html)註冊然後登錄一個用戶使用Django
<form action="adduser" method="post">
{% csrf_token %}
Email Address: <input type="email" name="email" required autocomplete="on" placeholder="[email protected]"/><br/>
Username: <input type="text" name="username" maxlength=25 required placeholder="JoyfulSophia"/><br/>
Password: <input type="password" name="password" maxlength=30 required placeholder="**********" /><br/>
<br/>
<input type="submit" value="Send" /> <input type="reset">
</form>
這重定向到ADDUSER視圖:
def adduser(request):
u = User.objects.create_user(request.POST['username'], request.POST['email'], password=request.POST['password'])
u.save()
a = Accounts(user=u)
p = Passwords(user=u)
a.save()
p.save()
return HttpResponseRedirect(reverse('OmniCloud_App.views.profile', args=(u.id,)))
這裏是配置文件:
@login_required
def profile(request, User_id):
u = get_object_or_404(User, pk=User_id)
a = get_object_or_404(Accounts, pk=User_id)
return render_to_response('profile.html', context_instance=RequestContext(request))
所以他們不會登錄,但沒關係,因爲我們可以發送給/ accounts/login?next =/7 /因爲他們是用戶7(Probl EMS進取!)
def login(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return HttpResponseRedirect("/account/profile/")
else:
return HttpResponseRedirect("/account/invalid/")
不包含任何用戶名叫做請求,但已提交ADDUSER形式呢,所以我怎麼能過即拍即兄弟登錄的人嗎?我可以讓它解析url(其中包含next = USER_ID),但對於只輸入base_url/login的用戶不起作用,並且user_id永遠不會成爲url的一部分。那麼,兄弟該做什麼?
這是一個美妙的答案,非常感謝! – Chris
我已經有了一個login.html,所以我需要包含{form,LoginForm()... etc? – Chris
沒有必要擁有LoginForm,你可以自己鍵入html,然後從request.POST中提取數據,但我會建議使用它。我也會使用一個註冊,它可以讓事情變得更容易。另外,如果你創建了一個,你將不得不導入它。根據我在答案中寫的觀點,可以在模板中以「form」的形式提供,但你可以改變它。 –