2012-03-30 9 views
0

Djangoでプログラムされたサーバー側から電子メールとユーザー名を取得するための登録フォームを検証しようとしています。私はこの1つを確認しましたjQuery Validation Plugin remote check for password with Djangoしかし、私は403禁止されています - CSRF検証に失敗しました。 jqueryスクリプトの中にcsrfトークンを含めてみました。しかし、まだ動作していません。電子メールの可用性をチェックするためのコードを以下に示しました。Javeryの検証 - サーバーサイドのDjangoから電子メールとユーザー名の可用性を確認する

views.py:

def email_check(request): 
    response_str="false" 
    if request.is_ajax(): 
     e = request.POST.get("email_address") 
     try: 
      obj = User.objects.get(email=e) 
     except DoesNotExist: 
      response_str="true" 
    return HttpResponse(response_str) 

urls.py:

url(r'^signup/email/check/$', 'registration.views.email_check') 

signup.html: https://gist.github.com/2253002

誰もがこの上で私を助けてもらえますか?

ありがとうございます!

https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#ajax

+0

djangoを使用している場合は、このすべてを行うためにJQueryが必要ありません。ユーザー登録はFormsを介して行う必要があります。これを参照してください:http://www.b-list.org/weblog/2006/sep/ 02/django-tips-user-registration/ –

+0

@RamandeepSingh Ajaxの機能は必須です。そのため、私はjQueryの検証プラグインを使用しています。 – rnk

+1

"それは動作していません"。何がうまくいかないの? – alan

答えて

2

あなたは、「X-CSRFToken」という名前のクッキーにCSRFトークンを送信する必要があり、このようなjQueryを使って、この動作をグローバルにイネーブルにする方法がありますあなたのAJAX POST呼び出しに常にcsrfトークンが含まれるようにするには、テンプレート内のコードを使用します。詳細については、公式文書からthis articleを確認してください。

0
$('html').ajaxSend(function(event, xhr, settings) { 
    function getCookie(name) { 
     var cookieValue = null; 
     if (document.cookie && document.cookie != '') { 
      var cookies = document.cookie.split(';'); 
      for (var i = 0; i < cookies.length; i++) { 
       var cookie = jQuery.trim(cookies[i]); 
       // Does this cookie string begin with the name we want? 
       if (cookie.substring(0, name.length + 1) == (name + '=')) { 
        cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
        break; 
       } 
      } 
     } 
     return cookieValue; 
    } 
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 
     // Only send the token to relative URLs i.e. locally. 
     xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
    } 
}); 

リファレンス上記のjQuery:

関連する問題