2015-02-08 111 views
0

我試圖發送一個Ajax請求到一個名爲getToken()的視圖。我不確定它爲什麼不起作用。控制檯輸出「0:」。如果我將代碼包含在我的主頁視圖中,那麼這個頁面就是調用它的頁面,它會將頁面更改爲json輸出,而不是我告訴它的documentid。它根本不會調用getToken,即使它設置在urls文件中,並且我的ajax url被設置爲該url。Django Ajax請求不正確執行

當用戶在他的個人資料上點擊創建令牌時,它會發送一個ajax請求到getToken並在輸出頁面返回該輸出。因此,用戶然後可以將該密鑰給予他的朋友,以便他們可以添加他或電子郵件或文本密鑰。

HTML

{% load staticfiles %} 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
    <script {% static "ChompMe/jquery.js" %}></script> 
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#create_token").click(function() { 
        var csrf = '{{ csrf_token }}'; 
        $.ajax({ 
         type: 'POST' , 
         url: '/gettoken', 
         datatype: 'json' , 
         async: true, 
         data:{ 
          csrfmiddlewaretoken: '{{ csrf_token }}', 
          create_token: 'create_token', 
         }, 
         success: function(json) { 
          console.log(csrf); 
          console.log(json.message); 
          document.getElementById('output').innerHTML = (json.message); 

         }, 
         error : function(xhr,errmsg,err) { 
           console.log(xhr.status + ": " + xhr.responseText); 
           document.getElementById('output').innerHTML = "Token:" + " Request Failed."; 
          }      
         }); 

      }); 
     }); 
    </script> 
     <title>ChompMe 
     {% block title %}{% endblock %}</title> 
    </head> 
    <body> 
     {% block content %}{% endblock %} 

     <form method='POST' > 
     {% csrf_token %} 
     <button id='create_token' name = 'create_token' value='create_token' > Create Token </button> 
     </form> 
     <p id='output'> 
     Token: 
     </p> 
    </body> 
</html> 

Urls.py 

    urlpatterns = patterns('', 
     url(r'^$', 'django.contrib.auth.views.login'), 
     url(r'^logout/$', logout_page), 
     url(r'^accounts/login/$', 'django.contrib.auth.views.login'), # If user is not login it will redirect to login page 
     url(r'^register/$', register), 
     url(r'^home$', home), 
     url(r'^register/success/$', register_success), 
     url(r'^admin/', include(admin.site.urls)), 
     url(r'^gettoken$', getToken), 
     url(r'^[A-Za-z0-9_.]+$', friends), 
    ) 

Views.Py 

    @login_required 
    @csrf_protect 
    def getToken(request): 
     print 'getToken' 
     post_data = request.POST.copy() 
     username = request.user 

     if request.POST.has_key('create_token'): 
      datetimes = datetime.now() 
      enc_token = base64.urlsafe_b64encode(str(request.user) + str(datetimes)) 
      token = enc_token 
      context = {'token':token} 
      return HttpResponse(json.dumps(context),content_type="application/json") 

    @login_required 
    @csrf_protect 
    def home(request): 
     print 'home' 
     post_data = request.POST.copy() 
     username = request.user 

     if request.POST.has_key('create_token'): 
      datetimes = datetime.now() 
      enc_token = base64.urlsafe_b64encode(str(request.user) + str(datetimes)) 
      token = enc_token 
      context = {'token':token} 
      return HttpResponse(json.dumps(context),content_type="application/json")  

     user_data = UserProfile.objects.filter(username=str(request.user)) 
     print user_data 
     context = {'user': request.user, 
         'user_data':user_data, 
        } 

     return render_to_response('home.html',context , RequestContext(request)) 

回答