2016-12-29 6 views
3

DjangoにAJAXログインフォームを作成しようとしています。これは、ユーザーが正しいusernamepasswordを入力したかどうかを確認する必要があります。ここに私のコードは今ある:Django AJAXログインフォームの検証

urls.py

urlpatterns = [ 
    url(r'^$', views.boxes_view, name='news'), 
    url(r'^user_login/', views.user_login, name='user_login'), 
] 

forms.py

class UserLoginForm(forms.Form): 
    username = forms.CharField(max_length=25) 
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 

     fields = [ 
      'username', 
      'password', 
     ] 

base.html

<form method="post" enctype="multipart/form-data" action="{% url 'user_login' %}" class="form_login">{% csrf_token %} 
<div class="loginWrapper"> 
<div class="login"> 
    <div class="loginBox"> 
     {{ form_login.username|placeholder:"username"|add_class:"login_username" }} 
     {{ form_login.password|placeholder:"password"|add_class:"login_password" }} 

     <input type="submit" value="login"/> 
    </div> 
</div> 
</div> 
</form> 

これは私のjQuery関数です。入力したusernamepasswordをコンソールに正常に記録します。

base.js

$('.form_login').on('submit', function(e) { 

    $.ajax({ 
     type: 'POST', 
     url: 'http://127.0.0.1:8000/user_login/', 
     data: {'username': $('.login_username').val(), 
       'password': $('.login_password').val()}, 
     success: function (data) { 
      console.log(data) 
       } 
     } 
    ) 
}) 

は、どのように私は私のviews.pyにjQueryの関数からdataを得るのですか?ここに私の現在のビューは、ユーザーをログに正常に動作しますが、間違った資格情報が入力されたとにかくフォームを提出するので、AJAXを実装して、これが発生した場合には、

views.py

def user_login(request): 
    form_login = UserLoginForm(request.POST or None) 
    if form_login.is_valid(): 
     username = form_login.cleaned_data['username'] 
     password = form_login.cleaned_data['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None and user.is_active: 
      login(request, user) 
     else: 
      pass 
    else: 
     print(form_login.errors) 
     print(form_login.non_field_errors) 
     form_login = UserLoginForm() 

    return redirect('/') 

そしてどのように私は私のviews.pyにjQueryのデータを認証しますか?

+0

あなたは私の答えを試しましたか? – e4c5

+0

私の認証システムをAllauthに変更する過程で、あなたが言ったように。私はまだAJAXの部分に行っていない理由は、abitのトラブルを抱えている。問題は、Allauthが使用するURL(/ accounts/login)ではなく、自分のurl(base.html)にログインフォームを拡張しようとしていることです。 – Zorgan

答えて

1

まず、あなた自身の登録/認証システムを作成するべきではありません。そこにはいくつかの試みられた解決策があります。 Django Allauthは即座に気になります。

第二に、あなたがAJAXながら、ログインデータを送信する場合、あなたはビューでは、単に別のページにリダイレクトされているフォームの無効なセクションに続いて、AJAX応答

if user is not None and user.is_active: 
     login(request, user) 
     return JsonResponse({'status': 'ok'}); 
    else: 
     return JsonResponse({'status': 'login failed'}); 

を返すようにしたいでしょう。それはajaxでうまく動作しません。

else: 
    return JsonResponse(form_login.errors.as_json())