2017-12-30 59 views
1

Djangoを使用してWebサイトを作成しようとしていますが、ログインが必要なビューがいくつかあります。しかし、私はユーザーを認証する方法を把握することはできません。私はウェブ開発に非常に新しい(これは私の最初のプロジェクトです)ので、明確でない場合はフォローアップの質問をしてください。 rushsite /ラッシュ/ views.pyからDjangoアプリケーションでユーザーを認証できません

抜粋:ここではコンテキストを提供するかもしれないいくつかのコードがある

from django.http import HttpResponseRedirect 
from django.contrib.auth import authenticate, login 
from django.contrib.auth.decorators import login_required 

def login_user(request): 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      login(request, user) 
      return HttpResponseRedirect('list') 
     else: 
      return render(request, "registration/login.html") 
    else: 
     return render(request, "registration/login.html") 

マイlogin.htmlとファイル:rushsite /ラッシュ/モデルから

<!DOCTYPE html> 
<html lang="en"> 

<head> 
    <meta charset="utf-8"> 
</head> 

<body> 
    <div class="container"> 
     <div class="top"> 
      <h1 id="title" class="hidden"><span id="logo">Delta Sig<span> Recruitment</span></span></h1> 
     </div> 
     <div class="login-box animated fadeInUp"> 
      <div class="box-header"> 
       <h2>Log In</h2> 
      </div> 
      <form method="post"> 
       {% csrf_token %} 
       <label for="username">Username</label> 
       <br/> 
       <input type="text" id="username"> 
       <br/> 
       <label for="password">Password</label> 
       <br/> 
       <input type="password" id="password"> 
       <br/> 
       <button type="submit">Sign In</button> 
       <br/> 
       <br/> 
       {% if request.META.HTTP_REFERER == "http://127.0.0.1:8000/login/" %} Incorrect username or password. {% endif %} 
      </form> 
     </div> 
    </div> 
</body> 

抜粋.py:

私が知っている資格情報を使って自分のフォームでsubmitをクリックすると、user = None so私はちょうどログインページに戻って私をリダイレクトします。私は間違って何をしていますか?

+0

私はそれが私がOneToOneFieldさブラザーモデルを持っているという事実としなければならないかもしれないと思いますユーザー。しかし、私はこれがどういう意味かはっきりしていません。 –

+0

投稿していると思われる値が実際にビューに到着していることをデバッグできますか? – schwobaseggl

答えて

0

ログインビューで何か変なことをしていないので、django's pre-made authentication viewsを使用してください。これにより、ホイールを再発明する際に潜入する可能性がある通常の種類の問題を回避できます。

また、?next= GET argに基づいて、djangoのフォームの使用やログイン成功時のリダイレクトなど、いくつかの追加機能が含まれています。

この場合、LoginViewが必要です。

また、[djangoの組み込みフォーム(https://docs.djangoproject.com/en/2.0/topics/forms/)を調べることをお勧めします。 の場合、は独自のビューを作成する必要がありましたが、フォームは検証に適しています。彼らはsimplify your template codeとなり、検証エラーを適切に表示します。 LoginViewで自動的に来るのフォームを使用して

、テンプレート内<form>はに減らすことができます。

<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
</form> 
関連する問題