Python 向TastyPie操作响应添加完整资源
我在api.py中定义了以下AuthResource。它接受对/auth/login操作的post请求,然后向用户返回其ApiKey,以便在设置了ApiKeyAuthentication的其余my资源上使用Python 向TastyPie操作响应添加完整资源,python,django,tastypie,Python,Django,Tastypie,我在api.py中定义了以下AuthResource。它接受对/auth/login操作的post请求,然后向用户返回其ApiKey,以便在设置了ApiKeyAuthentication的其余my资源上使用 class AuthResource(Resource): class Meta: authorization = Authorization() resource_name = 'auth' list_allowed_methods = ['post'] def
class AuthResource(Resource):
class Meta:
authorization = Authorization()
resource_name = 'auth'
list_allowed_methods = ['post']
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/login%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('login'), name="api_login")
]
def login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))
email = data.get('email', '')
password = data.get('password', '')
user = authenticate(email=email, password=password)
if user:
if user.is_active:
data = {'success': True, 'api_key': ApiKey.objects.get(user=user).key}
return self.create_response(request, data)
else:
return self.create_response(request, {'success': False, 'reason': 'account_disabled'}, HttpForbidden)
else:
return self.create_response(request, {'success': False, 'reason': 'incorrect_login'}, HttpUnauthorized)
不幸的是,我在《邮递员》中收到了以下回复:
{"api_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "success": true, "user": "FirstName LastName"}
我知道这是我的用户模型的\uuuu unicode\uuu
函数的值,但我真正想要的是完整的序列化对象。更像是:
{"api_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "success": true, "user": {'first_name': 'FirstName', 'last_name': 'LastName', 'email': 'email@example.com'}}
有什么想法吗?我想我不必这样做,我可以让客户端使用新获得的ApiKey向适当的UserResource提交另一个get请求,但就优化而言,这似乎是一个很容易实现的结果。我欢迎所有关于API设计的想法/最佳实践。我对你的问题没有答案,但我想推荐一种可以让你轻松实现你想要的,并且你会喜欢这个框架的方法。谢谢@orokusaki,我离切换还有一点远,但我想我会在下一个项目中使用django restframework,因为它看起来更像django风格的框架。我首先遇到了tastypie,它似乎有足够的临界质量,值得学习。
{"api_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "success": true, "user": {'first_name': 'FirstName', 'last_name': 'LastName', 'email': 'email@example.com'}}