在我的项目中,我使用 DRF 作为后端,使用 Angular 作为前端。
Django==1.10 djangorestframework==3.7.1
我需要来自 DRF 的所有响应都采用以下格式。
{
"status": "", // 200,400,.....etc
"error": "", // True, False
"data": [], // data
"message": "" // Success messages
}
Run Code Online (Sandbox Code Playgroud)
目前它在
[
{
"id": 1,
"name": ""
},
{
"id": 2,
"name": ""
}
]
Run Code Online (Sandbox Code Playgroud)
它应该是
{
"status": "200",
"error": "False",
"data": [
{
"id": 1,
"name": ""
},
{
"id": 2,
"name": ""
}
],
"message": "Success"
}
Run Code Online (Sandbox Code Playgroud)
为此,我编写了一个自定义视图集并覆盖了函数列表、详细信息、创建、更新
class ResponseModelViewSet(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset()) …Run Code Online (Sandbox Code Playgroud) python authentication django angularjs django-rest-framework
我目前正在开展一个需要Api的项目,我选择Tastypie并实施以下内容.我想在我的代码中使用tastypie的默认功能,如ApiKeyAuthentication,DjangoAuthorization等...
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()`enter code here`
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, …Run Code Online (Sandbox Code Playgroud) 我试图在tastypie Api中创建一个Login模块,当使用Postman REST客户端测试它时出错.
Method : POST
format : application/json
content type : json
raw data: {
'type': 'login',
'username': 'username',
'password': 'password'
}
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 …Run Code Online (Sandbox Code Playgroud)