2017-02-24 125 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

相关问题