2017-07-19 93 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))