Python flask代码参数中的forloop不循环第二个位置

Python flask代码参数中的forloop不循环第二个位置,python,python-3.x,for-loop,flask,flask-restful,Python,Python 3.x,For Loop,Flask,Flask Restful,我正在编写一个用例,通过PyAD在AD中创建组,并通过flask为该文件夹创建文件夹和组 我使用for循环传递参数并返回响应。如果组存在,则代码不应创建,否则应创建,然后继续创建文件夹并设置权限 但是对于传入请求的第一个组,逻辑工作正常,但是第二个组没有进入循环 面对问题,让它通过烧瓶工作并处理响应。有没有办法做到这一点,请帮忙 app = Flask(__name__) api = Api(app) #Class to create fileshare class Test(Resource

我正在编写一个用例,通过PyAD在AD中创建组,并通过flask为该文件夹创建文件夹和组

我使用for循环传递参数并返回响应。如果组存在,则代码不应创建,否则应创建,然后继续创建文件夹并设置权限

但是对于传入请求的第一个组,逻辑工作正常,但是第二个组没有进入循环

面对问题,让它通过烧瓶工作并处理响应。有没有办法做到这一点,请帮忙

app = Flask(__name__)
api = Api(app)
#Class to create fileshare

class Test(Resource):
    def post(self):
        pythoncom.CoInitialize()
        # Get JSON arguments from Payload shared NAS path, directorname  groupname with read access and right access
        parentdir = request.json.get("shareUNCPath")
        dirname = request.json.get("shareFolderName")
        readGroup = request.json.get("readGroup")
        writeGroup = request.json.get("writeGroup")
        domainName = request.json.get("domain")
        groupList = [readGroup,writeGroup]
        #for gn in groupList:
        try:
            j=(len(groupList))+1
            if readGroup == writeGroup:
                j=(len(groupList))-1
            #for gn in len(groupList):
            for i in range(4):
                groupName = groupList[i]
                pyad.set_defaults(username="username", password="password", ldap_server="ldapServer")
                rGroup = adgroup.ADGroup.from_cn(groupName)
                logging.debug("read group {} available in AD ".format(groupName))
                if __name__ == "__main__":
                    os.makedirs(path)
                    igroup, domain, type = win32security.LookupAccountName (domainName, groupName)
                    sd = win32security.GetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION)
                    dacl = sd.GetSecurityDescriptorDacl()
                    logging.debug("Domain1 {}, Group1 {}".format(domainName, groupName))
                    if groupName in readGroup:                              
                        dacl.AddAccessAllowedAce(win32security.ACL_REVISION,con.GENERIC_READ, igroup)
                    if groupName in writeGroup:
                        dacl.AddAccessAllowedAce(win32security.ACL_REVISION,con.GENERIC_WRITE, igroup)
                    isdir = os.path.isdir(path)
                    if isdir == True:
                        sd.SetSecurityDescriptorDacl(1, dacl, 0)
                        win32security.SetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION, sd)
                        dacl = sd.GetSecurityDescriptorDacl()
                        cnt=dacl.GetAceCount()
                        for  i in range(0, cnt):
                            rev, access, usersid = dacl.GetAce(i)
                            user, group, type = win32security.LookupAccountSid(domainName, usersid)
                            details = ('Group: {}/{}'.format(group, user), rev,  access)))
                            resp = Response('Successfully created file share {}. Details {}'.format(dirname, details))
                            print (resp)
                                resp.status_code = 200
                                return resp

        except Exception as e:
            errormsg = str(e)
            print (errormsg)
            if "The server is not operational" in errormsg:
                resp = Response('AD operation failed, unable to connect to Active Directory. Error - {}'.format(e))
                print (resp)
                resp.status_code = 301
                return resp
            else:
                try:
                    for i in range(4):
                        groupName = groupList[i]  
                        pyad.set_defaults(username="username", password="pasword",ldap_server="ldapServer")
                        ou = pyad.adcontainer.ADContainer.from_dn(group_OU)
                        rGroup = adgroup.ADGroup.create(
                            name=groupName,
                            security_enabled = True,
                            scope=groupScope,
                            container_object=ou,
                            optional_attributes={"description": description}
                        )
                        if rGroup.Displayname == (groupName):                           
                            if __name__ == "__main__":
                                os.makedirs(path)
                                #groupr = win32security.LookupAccountName ("", readGroup)
                                a.logon()
                                time.sleep(5)
                                igroup, domain, type = win32security.LookupAccountName (domainName, groupName)
                                sd = win32security.GetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION)
                                #dacl = win32security.ACL()
                                dacl = sd.GetSecurityDescriptorDacl()
                                #acl = pywintypes.ACL()
                                #set permessions for readGroup with GENERIC_READ level permessions
                                #dacl.AddAccessAllowedAce(win32security.ACL_REVISION,con.GENERIC_READ, groupr)
                                if groupName in readGroup:
                                    dacl.AddAccessAllowedAceEx(win32security.ACL_REVISION,con.OBJECT_INHERIT_ACE|con.CONTAINER_INHERIT_ACE,con.GENERIC_READ|con.GENERIC_EXECUTE, igroup)
                                if groupName in writeGroup:
                                    dacl.AddAccessAllowedAce(win32security.ACL_REVISION,con.GENERIC_WRITE, igroup)
                                isdir = os.path.isdir(path)
                                if isdir == True:
                                    sd.SetSecurityDescriptorDacl(1, dacl, 0)
                                    win32security.SetFileSecurity(path, win32security.DACL_SECURITY_INFORMATION, sd)
                                    dacl = sd.GetSecurityDescriptorDacl()
                                    cnt=dacl.GetAceCount()
                                    for  i in range(0, cnt):
                                        rev, access, usersid = dacl.GetAce(i)
                                        user, group, type = win32security.LookupAccountSid(domainName, usersid)
                                        details = ('Group: {}/{}'.format(group, user), rev,  access)
                                        #return ("Success Fileshare created: {} ".format(dirname))
                                        resp = Response('Successfully created file share {}. Details {}'.format(dirname, details))
                                        print (resp)
                                        resp.status_code = 200
                                        return resp

            except Exception as e:
                print(e)
                resp = Response('AD operation failed, unable to create to group {}. Error - {}'.format(groupName, e))
                print (resp)
                resp.status_code = 302
                return resp

api.add_resource(Test, '/test')

if __name__ == "__main__":

    #context = ('local.crt', 'local.key')#certificate and key files
    app.run(port="7050", host="0.0.0.0", use_reloader=True)

我检查了你的代码。有两件事应该改变

  • 使用
    i
    作为外循环和内循环的循环变量
  • 在第一个循环中,使用异常触发组创建。这将退出循环,不再处理任何组。您应该将异常块移动到
    范围(4)
    循环内
这是您的代码和注释

class Test(Resource):
    def post(self):
        .......
        try:
            ..........
            for i in range(4):  # using i as loop variable, loop will exit if exception
                ........
                if __ name __ == "__ main __":  # if group exists, update permissions, throws exception if group does not exist
                    ........
                    if isdir == True:
                        ........
                        for  i in range(0, cnt):  # using i as loop variable, again
                            .........

        # here is the problem - if the first group does not exist, an exception is thrown and the other groups are not processed
        except Exception as e:   # group does not exist, must add # You should move this inside the for loop
            ............
                try:
                    for i in range(4):  # using i as loop variable
                        ...........
                        if rGroup.Displayname == (groupName):                           
                            if __ name __ == "__main__":
                                .........
                                if isdir == True:
                                    ........
                                    for  i in range(0, cnt):  # using i as loop variable, again
                                        ..........
为了澄清,整体逻辑应如下所示:

for i in range(4):  # each group
    try:
         # update permissions
    except Exception as e:
         # add new group
作为旁注,请尝试在不使用try\except块的情况下检查组是否存在。在正常程序流中不应使用异常