2017-02-24 38 views
0

我使用Django 1.10 Django的外部HTML視圖,我有以下的html頁面register.html,login.html的,home.html的我怎樣才能使身份驗證的請求使用AJAX

HTML頁面部署在不同的應用服務器。我正在使用自定義用戶模型, 我可以註冊並將詳細信息存儲到數據庫中。還能夠驗證並登錄到應用程序並重定向到主頁。

問題: 我有一個名爲作爲樣本來看,測試

#viwes.py 
    @login_required 
    def test(request): 
     l=[] 
     l.append('x') 
     l.append('y') 
     return JsonResponse({"records": l}) 

所以登錄,當我直接訪問網址,

localhost:8000/app/test 

然後我可以在瀏覽器中獲得數據之後。 但是,登錄後,在同一個會話中,當我從home.html調用相同的url時,我無法驗證和接收數據。 在瀏覽器控制檯會爲成爲,

http://127.0.0.1:8000/accounts/login/?next=/app/test/ 

有一些崗位是指解決方案@ajax_required,因爲我是新來的Django,我沒有找到詳細的任何職務。任何人都可以請示例解釋或建議解決方案。提前致謝。

+0

您需要發送'CSRF 'ajax中的令牌調用有效載荷來標識用戶。 –

+0

謝謝vinay kumar。你可以給它的例子或重定向到它。 – sachin27

+0

您是否在Django應用程序所在服務器上託管您的ajax的html? – giaco

回答

0

我曾與下面的代碼和工作文件

views.py

from django.contrib.auth.decorators import login_required 
from django.http.response import JsonResponse 
from django.views.generic.base import View 

class LoginRequiredMixin(object): 
    @classmethod 
    def as_view(cls, **initkwargs): 
     view = super(LoginRequiredMixin, cls).as_view(**initkwargs) 
     return login_required(view) 


class TestLogin(LoginRequiredMixin, View): 

    def get(self, request, *args, **kwargs): 
     l = [] 
     l.append('x') 
     l.append('y') 
     return JsonResponse({"records": l}) 

urls.py試圖

from django.conf.urls import url 
from django.contrib import admin 

from myapp.views import TestLogin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^test/$', TestLogin.as_view(), name='testview'), 
] 

捲曲

curl -X GET -H "Cookie: csrftoken=t1l5CpH7kL5J48yf0c4C0z9kli3UfI3enCEdT4lH8RGQip1y8f8t1l3ucDWWzRGX,sessionid=99oqphuhy1udboq4pv2icgj408b1lpxi" "http://localhost:8000/test/" 
+0

我們不能僅僅在視圖函數上使用@login_required裝飾器,而不是使用LoginRequiredMixin類。 – sachin27

+0

如果你使用的是類的基本視圖,那麼'@method_decorator(login_required)'就可以了。 –

+0

我正在使用基於函數的視圖。那麼在我的問題中提到的觀點是否適用於觀點? – sachin27

相關問題