| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 | #!/usr/bin/env python3# -*- coding: utf-8 -*-import timefrom django.db.models import Qfrom django.utils.decorators import method_decoratorfrom django.views import Viewfrom django.views.decorators.csrf import csrf_exemptfrom Model.models import UserModelfrom Object.uidManageResponseObject import uidManageResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.ModelService import ModelServiceclass UserView(View):    @method_decorator(csrf_exempt)    def dispatch(self, request, *args, **kwargs):        return super(UserView, self).dispatch(request, *args, **kwargs)    def get(self, request, *args, **kwargs):        # print('get')        request.encoding = 'utf-8'        request_dict = request.GET        operation = kwargs.get('operation')        return self.validation(request_dict, operation)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        request_dict = request.POST        operation = kwargs.get('operation')        return self.validation(request_dict, operation)    def validation(self, request_dict, operation):        if operation == 'login':            return self.login(request_dict)        elif operation == 'logout':            return self.logout(request_dict)        else:            token = request_dict.get('token', None)            token = TokenObject(token)            response = uidManageResponseObject()            if token.code != 0:                return response.json(token.code)            if operation == 'query':                return self.do_query(request_dict)            elif operation == 'modify':                return self.do_modify_password(request_dict)            elif operation == 'list':                return self.do_list(request_dict)            elif operation == 'adminAdd':                return self.do_admin_add(token.userID, request_dict, response)            elif operation == 'adminDelete':                return self.do_admin_delete(token.userID, request_dict, response)            elif operation == 'adminUpdate':                return self.do_admin_update(token.userID, request_dict, response)            elif operation == 'adminReset':                return self.do_admin_reset(token.userID, request_dict, response)            else:                return uidManageResponseObject().json(309)    def login(self, request_dict):        username = request_dict.get('username', None)        password = request_dict.get('password', None)        response = uidManageResponseObject()        if username is None or password is None:            return response.json(444)        user = UserModel.objects.filter(username=username)        if user.exists():            if user[0].password != password:                return response.json(99)            else:                token = TokenObject()                res = token.generate(data={'userID': user[0].id})                res['permission'] = user[0].permission                res['username'] = user[0].username                user[0].online = 1                update = {                    'online': 1                }                user.update(**update)                return response.json(0, res)        else:            return response.json(99)    def do_query(self, request_dict):        # print('do_query')        token = TokenObject(request_dict.get('token', None))        # page = request_dict.get('page', None)        # line = request_dict.get('line', None)        # username = request_dict.get('username', None)        response = uidManageResponseObject()        if token.code != 0:            return response.json(token.code)        # if username:        #     user_qs = UserModel.objects.filter(username__icontains=username)        #     if user_qs.exists():        #         users = list(user_qs.values('username'))        #         return response.json(0, {'data': users})        #     else:        #         return response.json(0, {'data': []})        # elif page and line:        #     print('query_page')        #     user_qs = UserModel.objects.filter(id=token.userID)        #     if user_qs.exists():        #         user = user_qs[0]        #         if user.permission == '0':        #             return self.do_query_pagination(int(page), int(line), response)        #         else:        #             return response.json(404)        #     else:        #         return response.json(9)        user_qs = UserModel.objects.filter(~Q(Q(permission='0'))).values('id', 'username')        return response.json(0, {'data': list(user_qs)})    def do_query_pagination(self, page, line, response):        # print('query start')        user_qs = UserModel.objects.filter().values()        if user_qs.exists():            count = user_qs.count()            start = (page - 1) * line            end = start + line            users = list(user_qs[start:end])            # print('query end')            return response.json(0, {'count': count, 'data': users})        else:            return response.json(0, {'count': 0, 'data': []})    def do_modify_password(self, request_dict):        token = request_dict.get('token', None)        old_password = request_dict.get('oldPassword', None)        new_password = request_dict.get('newPassword', None)        token = TokenObject(token)        response = uidManageResponseObject()        if token.code != 0:            return response.json(token.code)        if old_password and new_password:            user_qs = UserModel.objects.filter(id=token.userID)            if user_qs.exists():                if user_qs[0].password != old_password:                    return response.json(47)                user = {                    'password': new_password                }                user_qs.update(**user)                return response.json(0)            else:                return response.json(9)        else:            return response.json(444)    def logout(self, request_dict):        token = request_dict.get('token', None)        token = TokenObject(token)        response = uidManageResponseObject()        if token.code != 0:            return response.json(0)        user_qs = UserModel.objects.filter(id=token.userID)        if user_qs.exists():            user = {                'online': 0            }            user_qs.update(**user)            return response.json(0)        else:            return response.json(0)    def do_list(self, request_dict):        token = request_dict.get('token', None)        response = uidManageResponseObject()        token = TokenObject(token)        if token.code != 0:            return response.json(token.code)        page = request_dict.get('page', None)        line = request_dict.get('limit', None)        if page and line:            user_qs = UserModel.objects.filter()            res = {                'count': user_qs.count(),                'data': []            }            if user_qs.exists():                page = int(page)                line = int(line)                start = (page - 1) * line                end = start + line                user_qs = user_qs[start:end].values('id', 'username', 'permission', 'phone', 'login_time', 'add_time')                res['data'] = list(user_qs)            return response.json(0, res)        else:            return response.json(444)    def do_admin_add(self, userID, request_dict, response):        # perm = ModelService.check_perm_uid_manage(userID, 0)        # if not perm:        #     return response.json(309)        print(request_dict)        username = request_dict.get('username', None)        password = request_dict.get('password', None)        phone = request_dict.get('phone', None)        role = request_dict.get('role', None)        if username and password and role:            user = UserModel()            user.username = username            user.password = password            user.permission = role            user.phone = phone            user.add_time = int(time.time())            user.save()            return response.json(0)        else:            return response.json(444)    def do_admin_delete(self, userID, request_dict, response):        # perm = ModelService.check_perm_uid_manage(userID, 0)        # if not perm:        #     return response.json(309)        username = request_dict.get('username', None)        if username:            user_qs = UserModel.objects.filter(username=username)            if user_qs.exists():                user_qs.delete()                return response.json(0)            else:                return response.json(9)        else:            return response.json(444)    def do_admin_update(self, userID, request_dict, response):        # perm = ModelService.check_perm_uid_manage(userID, 0)        # if not perm:        #     return response.json(309)        username = request_dict.get('username', None)        role = request_dict.get('role', None)        password = request_dict.get('password', None)        phone = request_dict.get('phone', None)        if username:            update_data = {}            if role:                update_data['permission'] = role            if password:                update_data['password'] = password            if phone:                update_data['phone'] = phone            UserModel.objects.filter(username=username).update(**update_data)            return response.json(0)        else:            return response.json(444)    def do_admin_reset(self, userID, request_dict, response):        # perm = ModelService.check_perm_uid_manage(userID, 0)        # if not perm:        #     return response.json(309)        username = request_dict.get('username', None)        if username:            user_qs = UserModel.objects.filter(username=username)            if user_qs.exists():                user_qs.update(password='123456')                return response.json(0)            else:                return response.json(9)        else:            return response.json(444)
 |