小编Chr*_*ose的帖子

用于所有响应的 Django REST 框架自定义格式

在我的项目中,我使用 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

8
推荐指数
1
解决办法
3207
查看次数

如何在Django项目中实现Tastypie中的登录模块

我目前正在开展一个需要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)

django tastypie

5
推荐指数
0
解决办法
193
查看次数

Django Tastypie通过PostMan REST客户端与API交互

我试图在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)

django rest json

5
推荐指数
1
解决办法
874
查看次数