Python 如何将django tastypie与django轴一起使用

Python 如何将django tastypie与django轴一起使用,python,django,tastypie,django-authentication,Python,Django,Tastypie,Django Authentication,设置: django==1.8 django-tastypie==0.13 django-axes==2.3 我已经通过tastypie获得了如下所示的登录资源 from django.contrib.auth import login class LoginResource(Resource): class Meta: resource_name = 'login' allowed_methods = ['post'] def obj_c

设置:

django==1.8
django-tastypie==0.13
django-axes==2.3
我已经通过tastypie获得了如下所示的登录资源

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 Axis中记录这些登录尝试。

看,我们可以看到它使用了一个名为
watch\u login
的装饰器来提供其功能

要使用您的资源记录登录尝试,您必须将该装饰程序应用于用户尝试使用给定资源登录时调用的
视图

基于
tastype
code,您可以覆盖资源的
prepend\u url
方法并添加url。像这样(这只是一个例子,没有经过测试):

def prepend_url(self):
从axes.decorators导入watch\u登录
URL=[
url(r“^(?P%s)/login$”%(self.\u meta.resource\u name),watch\u login(self.wrap\u view('dispatch\u list')),name=“login enpoint”)
]
返回URL

接下来是我自己的解决方案:在
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))
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))