2011-10-27 4 views
0

を持つユーザー申し込みはその後、私は(signup.htmlに)簡単なサインアップフォームを持っているジャンゴ

<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> 

のログインこれは、アドユーザービューにリダイレクトします。ここでは

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)) 

だから、サインインしていないかもしれませんが、それはユーザ7であるため、/ accounts/login?next =/7 /に送信できます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/") 

要求は、ユーザ名と呼ばれるものが含まれていませんが、アドユーザーフォームに提出されたものではありませんので、どのように私はログインする以上、その仲間を撃つことができますか?私は、URLを解析することができます(次の= USER_IDが含まれています)が、それはちょうどbase_url/loginで入力する人のためにはうまくいかず、user_idは永遠にURLの一部にはなりません。だから弟は何をするのですか?

答えて

3

投稿データは1回のリクエストに対してのみ存在します。後で使用する場合は、別の場所に保存する必要があります。

登録後すぐにユーザにログインすることができます。adduserビューでは、ユーザ名とパスワードを入力しただけで、再度入力する必要はありません。

ログインビューは少しです。これは単にビューの "POST"部分です。あなたはそれがGET要求であるかどうかチェックし、usernamepasswordのフィールドと同じビューを指すターゲットURLを含むフォームを返すテンプレートであるかどうかを調べる必要があります。このような何か:また

{% extends "base_site.html" %} 

{% block content %} 
    <form method="post" target="{% url login_view %}"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Login" /> 
    </form> 
{% endblock content %} 

ユーザー名とパスワードが一致して、いくつかのメッセージを追加しなかった場合、あなたは同じログインフォームにユーザーを返すことができます:

def login(request): 
    if request.method == 'GET': 
     return render_to_response('login.html', 
            { 'form': LoginForm() }, 
            context_instance=RequestContext(request)) 
    elif request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['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/") 

login.htmlはこのようなものです!

これは私の頭の上からのものですが、試してみませんでしたが、うまくいくはずです!

+0

これは素晴らしい答えです、ありがとうございます! – Chris

+0

私はすでにlogin.htmlを持っていますので、{form、LoginForm()...などを含める必要がありますか? – Chris

+0

LoginFormを持つ必要はありません。自分でhtmlを入力してから、request.POSTからデータを抽出できますが、使用することをお勧めします。私も登録のために1つを使用し、それは物事を簡単にすることができます。また、作成する場合は、インポートする必要があります。私が回答フォームに書いた見解によれば、テンプレートでは 'form'として利用可能になりますが、あなたはそれを変更することができます。 –

0

というDjango用の拡張可能なユーザー登録アプリケーションがあり、ユーザーの作成と登録に多くの機能を提供します。それを設定することは非常に簡単です、あなたは非常に良い文書を見つけることができますhere

関連する問題