2017-07-19 100 views
1

设置:通过tastypie如何使用Django的tastypie Django的轴

django==1.8 
django-tastypie==0.13 
django-axes==2.3 

我有登录的资源是什么样子低于

from django.contrib.auth import login 


class LoginResource(Resource): 
    class Meta: 
     resource_name = 'login' 
     allowed_methods = ['post'] 

    def obj_create(self, bundle, **kwargs): 
     form = AuthForm(data=bundle.data) 
     if form.is_valid(): 
      request.session.set_expiry(0) 
      if form.get_user(): 
       login(bundle.request, form.get_user()) 
       raise ImmediateHttpResponse(response=HttpResponse(status=200)) 
     raise ImmediateHttpResponse(response=http.HttpBadRequest(status=400)) 

我无法弄清楚如何用django-axes记录这些登​​录尝试。

回答

0

Looking at the code from django-axes我们可以看到它使用一个名为watch_login的装饰器来提供它的功能。

要使用您的资源记录登录尝试,您必须将该装饰器应用于当用户尝试使用该给定资源登录时调用的view

根据tastypie的代码,你可以覆盖你的资源的prepend_urls方法并添加你的url。这样的(这只是一个例子,未测试):

def prepend_urls(self): 
    from axes.decorators import watch_login 
    urls = [ 
     url(r"^(?P<resource_name>%s)/login$" % (self._meta.resource_name,), watch_login(self.wrap_view('dispatch_list')), name="login-enpoint") 
    ] 
    return urls 
1

自己的解决方案是未来:我写views.py

from django.contrib.auth.views import login 


def core_login(request, *args, **kwargs): 
    kwargs["authentication_form"] = AuthForm 
    return login(request, *args, **kwargs) 

而且在tastypie资源自定义登录视图:

from core.views import core_login 

class LoginResource(Resource): 
    class Meta: 
     resource_name = 'login' 
     allowed_methods = ['post'] 

    def obj_create(self, bundle, **kwargs): 
     bundle.request.POST = bundle.data 
     if core_login(bundle.request).status_code == 302: 
      raise ImmediateHttpResponse(response=HttpResponse(status=200)) 
     raise ImmediateHttpResponse(response=http.HttpBadRequest(status=400))