您的方法将尝试使用您要进行身份验证的用户名创建一个新用户。正如您所注意到的,这将在数据库层冒泡,该用户已经存在。
您想要创建一个
UserResource,在其上添加一个方法,用户可以将其发布到并使用通过用户名/密码传递的数据登录。
from django.contrib.auth.models import Userfrom django.contrib.auth import authenticate, login, logoutfrom tastypie.http import HttpUnauthorized, HttpForbiddenfrom django.conf.urls import urlfrom tastypie.utils import trailing_slashclass 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']) data = self.deserialize(request, request.raw_post_data, format=request.meta.get('CONTENT_TYPE', 'application/json')) username = data.get('username', '') password = data.get('password', '') user = authenticate(username=username, password=password) if user: if user.is_active: login(request, user) return self.create_response(request, { 'success': True }) else: return self.create_response(request, { 'success': False, 'reason': 'disabled', }, HttpForbidden ) else: return self.create_response(request, { 'success': False, 'reason': 'incorrect', }, HttpUnauthorized ) 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)
现在,您可以将POST发送到
http://hostname/api/user/logindata了
{ 'username' : 'me','password' : 'l33t' }。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)