我想创建登录资源,但我不知道怎么做:(
我有我的UserResource,我认为最好使用LoginResource作为登录方法。
class UserResource(ModelResource):
foreign_key = ForeignKey(ForeignResource, 'foreign_key', null=True)
...
class Meta:
queryset = User.objects.all()
allowed_methods = ['post']
resource_name = 'user'
authentication = ApiKeyAuthentication()
authorization = Authorization()
def obj_create(self, bundle, **kwargs):
try:
bundle = super(UserResource, self).obj_create(bundle, **kwargs)
bundle.obj.set_password(bundle.data.get('password'))
bundle.obj.save()
except IntegrityError:
raise BadRequest(_("A user with that username already exists."))
return bundle因此,我应该如何实现LoginResource实现,这就是我所取得的进展:)
class LoginResource(ModelResource):
pass我的愿望是发送(post/ GET ) /v1/ login / username和password,如果登录成功,则返回user对象,就像我有GET /v1/user/1/一样。
提前感谢!
发布于 2013-04-28 01:44:40
你需要在这里做一些事情,
举个例子:https://gist.github.com/airtonix/5473873
其中一些代码可能会对比我更有能力的人造成可怕的冒犯,但这绝对是你想要的方向。
发布于 2013-06-30 05:51:25
像这样的东西应该可以工作(未经测试):
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
fields = ['first_name', 'last_name', 'email']
allowed_methods = ['get', 'post']
resource_name = 'user'
def override_urls(self):
return [
url(r"^(?P<resource_name>%s)/login%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('login'), name="api_login"),
url(r'^(?P<resource_name>%s)/logout%s$' %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('logout'), name='api_logout'),
]
def login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
kwargs = {'pk': user.id, 'api_name': u'v1', 'resource_name': u'user'}
return self.get_detail(request, **kwargs)
else:
return HttpResponse(status=401)
else:
return HttpResponse(status=401)
def logout(self, request, **kwargs):
self.method_check(request, allowed=['get'])
if request.user and request.user.is_authenticated():
logout(request)
return self.create_response(request, { 'success': True })
else:
return self.create_response(request, { 'success': False }, HttpUnauthorized)然后您可以执行以下操作:
curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"username" : "me", "password": "l33t"}' http://localhost:8000/api/v1/user/login/并且它应该在成功登录时为您提供用户对象。
https://stackoverflow.com/questions/16253703
复制相似问题